-
-
Notifications
You must be signed in to change notification settings - Fork 57
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
* Duplicate MainActivity, settings fragment and realted files. * Add a setting to toggle between UIs and an activity launcher that launches the corresponding activity. * Resolve DI and ToxService's notification intent * Change the new theme to be based on material design.
- Loading branch information
1 parent
f57f24b
commit c214d3e
Showing
18 changed files
with
1,585 additions
and
3 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,32 @@ | ||
package ltd.evilcorp.atox | ||
|
||
import android.app.Activity | ||
import android.content.Intent | ||
import android.os.Bundle | ||
import javax.inject.Inject | ||
import ltd.evilcorp.atox.settings.Settings | ||
|
||
class ActivityLauncher : Activity() { | ||
|
||
@Inject | ||
lateinit var settings: Settings | ||
|
||
override fun onCreate(savedInstanceState: Bundle?) { | ||
(application as App).component.inject(this) | ||
super.onCreate(savedInstanceState) | ||
|
||
val newIntent = intent.clone() as Intent | ||
|
||
if (settings.wipUI) { | ||
newIntent.setClass(applicationContext, NewMainActivity::class.java) | ||
} else { | ||
newIntent.setClass(applicationContext, MainActivity::class.java) | ||
} | ||
startActivity(newIntent) | ||
} | ||
|
||
override fun onStop() { | ||
super.onStop() | ||
finish() | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,131 @@ | ||
// SPDX-FileCopyrightText: 2019-2021 aTox contributors | ||
// | ||
// SPDX-License-Identifier: GPL-3.0-only | ||
|
||
package ltd.evilcorp.atox | ||
|
||
import android.content.Intent | ||
import android.os.Build | ||
import android.os.Bundle | ||
import android.util.Log | ||
import android.view.WindowManager | ||
import androidx.appcompat.app.AppCompatActivity | ||
import androidx.appcompat.app.AppCompatDelegate | ||
import androidx.core.os.bundleOf | ||
import androidx.core.view.WindowCompat | ||
import androidx.navigation.fragment.findNavController | ||
import coil.Coil | ||
import coil.ImageLoader | ||
import coil.decode.GifDecoder | ||
import coil.decode.ImageDecoderDecoder | ||
import javax.inject.Inject | ||
import ltd.evilcorp.atox.di.ViewModelFactory | ||
import ltd.evilcorp.atox.settings.Settings | ||
import ltd.evilcorp.atox.ui.contactlist.ARG_SHARE | ||
|
||
private const val TAG = "OldMainActivity" | ||
private const val SCHEME = "tox:" | ||
private const val TOX_ID_LENGTH = 76 | ||
|
||
class NewMainActivity : AppCompatActivity() { | ||
@Inject | ||
lateinit var vmFactory: ViewModelFactory | ||
|
||
@Inject | ||
lateinit var autoAway: AutoAway | ||
|
||
@Inject | ||
lateinit var settings: Settings | ||
|
||
override fun onCreate(savedInstanceState: Bundle?) { | ||
(application as App).component.inject(this) | ||
|
||
super.onCreate(savedInstanceState) | ||
|
||
if (settings.disableScreenshots) { | ||
window.setFlags(WindowManager.LayoutParams.FLAG_SECURE, WindowManager.LayoutParams.FLAG_SECURE) | ||
} else { | ||
window.clearFlags(WindowManager.LayoutParams.FLAG_SECURE) | ||
} | ||
|
||
AppCompatDelegate.setDefaultNightMode(settings.theme) | ||
|
||
// The view inset/padding adjustments only run for Lollipop and newer. | ||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { | ||
WindowCompat.setDecorFitsSystemWindows(window, false) | ||
} | ||
|
||
Coil.setImageLoader { | ||
ImageLoader.Builder(this) | ||
.componentRegistry { | ||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) { | ||
add(ImageDecoderDecoder(this@NewMainActivity)) | ||
} else { | ||
add(GifDecoder()) | ||
} | ||
} | ||
.build() | ||
} | ||
|
||
setTheme(R.style.Theme_aTox_DayNight) | ||
setContentView(R.layout.new_activity_main) | ||
|
||
// Only handle intent the first time it triggers the app. | ||
if (savedInstanceState != null) return | ||
handleIntent(intent) | ||
} | ||
|
||
override fun onNewIntent(intent: Intent?) { | ||
super.onNewIntent(intent) | ||
handleIntent(intent) | ||
} | ||
|
||
override fun onPause() { | ||
super.onPause() | ||
autoAway.onBackground() | ||
} | ||
|
||
override fun onResume() { | ||
super.onResume() | ||
autoAway.onForeground() | ||
} | ||
|
||
private fun handleIntent(intent: Intent?) { | ||
when (intent?.action) { | ||
Intent.ACTION_VIEW -> handleToxLinkIntent(intent) | ||
Intent.ACTION_SEND -> handleShareIntent(intent) | ||
} | ||
} | ||
|
||
private fun handleToxLinkIntent(intent: Intent) { | ||
val data = intent.dataString ?: "" | ||
Log.i(TAG, "Got uri with data: $data") | ||
if (!data.startsWith(SCHEME) || data.length != SCHEME.length + TOX_ID_LENGTH) { | ||
Log.e(TAG, "Got malformed uri: $data") | ||
return | ||
} | ||
|
||
supportFragmentManager.findFragmentById(R.id.nav_host_fragment)?.findNavController()?.navigate( | ||
R.id.addContactFragment, | ||
bundleOf("toxId" to data.drop(SCHEME.length)), | ||
) | ||
} | ||
|
||
private fun handleShareIntent(intent: Intent) { | ||
if (intent.type != "text/plain") { | ||
Log.e(TAG, "Got unsupported share type ${intent.type}") | ||
return | ||
} | ||
|
||
val data = intent.getStringExtra(Intent.EXTRA_TEXT) | ||
if (data.isNullOrEmpty()) { | ||
Log.e(TAG, "Got share intent with no data") | ||
return | ||
} | ||
|
||
Log.i(TAG, "Got text share: $data") | ||
val navController = | ||
supportFragmentManager.findFragmentById(R.id.nav_host_fragment)?.findNavController() ?: return | ||
navController.navigate(R.id.contactListFragment, bundleOf(ARG_SHARE to data)) | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.