Commit 95959639 authored by Mygod's avatar Mygod

Fix keyboard shortcuts

Actually they never worked lol.
parent d753b083
......@@ -4,7 +4,7 @@ apply plugin: 'com.github.ben-manes.versions'
buildscript {
ext {
kotlinVersion = '1.2.60'
kotlinVersion = '1.2.61'
minSdkVersion = 21
sdkVersion = 28
compileSdkVersion = 28
......
......@@ -38,7 +38,6 @@ import android.widget.ImageView
import android.widget.Switch
import androidx.appcompat.app.AppCompatActivity
import androidx.appcompat.widget.Toolbar
import androidx.core.app.TaskStackBuilder
import androidx.core.content.getSystemService
import androidx.recyclerview.widget.DefaultItemAnimator
import androidx.recyclerview.widget.LinearLayoutManager
......@@ -46,11 +45,13 @@ import androidx.recyclerview.widget.RecyclerView
import com.github.shadowsocks.App.Companion.app
import com.github.shadowsocks.database.ProfileManager
import com.github.shadowsocks.preference.DataStore
import com.github.shadowsocks.utils.*
import com.github.shadowsocks.utils.DirectBoot
import com.github.shadowsocks.utils.Key
import com.github.shadowsocks.utils.thread
import com.google.android.material.snackbar.Snackbar
import java.util.concurrent.atomic.AtomicBoolean
class AppManager : AppCompatActivity(), Toolbar.OnMenuItemClickListener {
class AppManager : AppCompatActivity() {
companion object {
@SuppressLint("StaticFieldLeak")
private var instance: AppManager? = null
......@@ -170,15 +171,8 @@ class AppManager : AppCompatActivity(), Toolbar.OnMenuItemClickListener {
super.onCreate(savedInstanceState)
setContentView(R.layout.layout_apps)
toolbar = findViewById(R.id.toolbar)
toolbar.setTitle(R.string.proxied_apps)
toolbar.setNavigationIcon(theme.resolveResourceId(R.attr.homeAsUpIndicator))
toolbar.setNavigationOnClickListener {
val intent = parentActivityIntent
if (intent == null || !shouldUpRecreateTask(intent) && !isTaskRoot) finish() else
TaskStackBuilder.create(this).addNextIntentWithParentStack(intent).startActivities()
}
toolbar.inflateMenu(R.menu.app_manager_menu)
toolbar.setOnMenuItemClickListener(this)
setSupportActionBar(toolbar)
supportActionBar!!.setDisplayHomeAsUpEnabled(true)
if (!DataStore.proxyApps) {
DataStore.proxyApps = true
......@@ -208,8 +202,12 @@ class AppManager : AppCompatActivity(), Toolbar.OnMenuItemClickListener {
loadAppsAsync()
}
override fun onMenuItemClick(item: MenuItem): Boolean {
when (item.itemId) {
override fun onCreateOptionsMenu(menu: Menu?): Boolean {
menuInflater.inflate(R.menu.app_manager_menu, menu)
return true
}
override fun onOptionsItemSelected(item: MenuItem?): Boolean {
when (item?.itemId) {
R.id.action_apply_all -> {
val profiles = ProfileManager.getAllProfiles()
if (profiles != null) {
......
......@@ -32,6 +32,8 @@ import android.nfc.NdefMessage
import android.nfc.NfcAdapter
import android.os.Bundle
import android.util.Log
import android.view.KeyCharacterMap
import android.view.KeyEvent
import android.view.MenuItem
import android.view.View
import androidx.appcompat.app.AlertDialog
......@@ -286,6 +288,13 @@ class MainActivity : AppCompatActivity(), ShadowsocksConnection.Interface, OnPre
}
}
override fun onKeyShortcut(keyCode: Int, event: KeyEvent?) =
(supportFragmentManager.findFragmentById(R.id.fragment_holder) as ToolbarFragment).toolbar.menu.let {
it.setQwertyMode(KeyCharacterMap.load(event?.deviceId ?: KeyCharacterMap.VIRTUAL_KEYBOARD).keyboardType
!= KeyCharacterMap.NUMERIC)
it.performShortcut(keyCode, event, 0)
}
override fun onStop() {
connection.listeningForBandwidth = false
super.onStop()
......
......@@ -23,9 +23,10 @@ package com.github.shadowsocks
import android.app.Activity
import android.content.Intent
import android.os.Bundle
import android.view.Menu
import android.view.MenuItem
import androidx.appcompat.app.AlertDialog
import androidx.appcompat.app.AppCompatActivity
import androidx.appcompat.widget.Toolbar
import com.github.shadowsocks.plugin.PluginContract
import com.github.shadowsocks.preference.DataStore
......@@ -39,14 +40,19 @@ class ProfileConfigActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.layout_profile_config)
val toolbar = findViewById<Toolbar>(R.id.toolbar)
toolbar.setTitle(R.string.profile_config)
toolbar.setNavigationIcon(R.drawable.ic_navigation_close)
toolbar.setNavigationOnClickListener { onBackPressed() }
toolbar.inflateMenu(R.menu.profile_config_menu)
toolbar.setOnMenuItemClickListener(child)
setSupportActionBar(findViewById(R.id.toolbar))
supportActionBar!!.apply {
setDisplayHomeAsUpEnabled(true)
setHomeAsUpIndicator(R.drawable.ic_navigation_close)
}
}
override fun onCreateOptionsMenu(menu: Menu?): Boolean {
menuInflater.inflate(R.menu.profile_config_menu, menu)
return true
}
override fun onOptionsItemSelected(item: MenuItem?) = child.onOptionsItemSelected(item)
override fun onBackPressed() {
if (DataStore.dirty) AlertDialog.Builder(this)
.setTitle(R.string.unsaved_changes_prompt)
......
......@@ -28,7 +28,6 @@ import android.os.Bundle
import android.os.UserManager
import android.view.MenuItem
import androidx.appcompat.app.AlertDialog
import androidx.appcompat.widget.Toolbar
import androidx.core.content.getSystemService
import androidx.core.os.bundleOf
import androidx.preference.Preference
......@@ -51,7 +50,7 @@ import com.github.shadowsocks.utils.Key
import com.takisoft.preferencex.EditTextPreference
import com.takisoft.preferencex.PreferenceFragmentCompat
class ProfileConfigFragment : PreferenceFragmentCompat(), Toolbar.OnMenuItemClickListener,
class ProfileConfigFragment : PreferenceFragmentCompat(),
Preference.OnPreferenceChangeListener, OnPreferenceDataStoreChangeListener {
companion object {
private const val REQUEST_CODE_PLUGIN_CONFIGURE = 1
......@@ -174,7 +173,7 @@ class ProfileConfigFragment : PreferenceFragmentCompat(), Toolbar.OnMenuItemClic
} else super.onActivityResult(requestCode, resultCode, data)
}
override fun onMenuItemClick(item: MenuItem) = when (item.itemId) {
override fun onOptionsItemSelected(item: MenuItem?) = when (item?.itemId) {
R.id.action_delete -> {
val activity = requireActivity()
AlertDialog.Builder(activity)
......
......@@ -29,11 +29,10 @@ import android.os.Build
import android.os.Bundle
import android.util.Log
import android.util.SparseArray
import android.view.Menu
import android.view.MenuItem
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import androidx.appcompat.widget.Toolbar
import androidx.core.app.TaskStackBuilder
import androidx.core.content.getSystemService
import androidx.core.util.forEach
import com.crashlytics.android.Crashlytics
......@@ -43,7 +42,6 @@ import com.github.shadowsocks.database.ProfileManager
import com.github.shadowsocks.utils.datas
import com.github.shadowsocks.utils.openBitmap
import com.github.shadowsocks.utils.printLog
import com.github.shadowsocks.utils.resolveResourceId
import com.google.android.gms.common.GoogleApiAvailability
import com.google.android.gms.samples.vision.barcodereader.BarcodeCapture
import com.google.android.gms.samples.vision.barcodereader.BarcodeGraphic
......@@ -52,7 +50,7 @@ import com.google.android.gms.vision.barcode.Barcode
import com.google.android.gms.vision.barcode.BarcodeDetector
import xyz.belvi.mobilevisionbarcodescanner.BarcodeRetriever
class ScannerActivity : AppCompatActivity(), Toolbar.OnMenuItemClickListener, BarcodeRetriever {
class ScannerActivity : AppCompatActivity(), BarcodeRetriever {
companion object {
private const val TAG = "ScannerActivity"
private const val REQUEST_IMPORT = 2
......@@ -62,12 +60,6 @@ class ScannerActivity : AppCompatActivity(), Toolbar.OnMenuItemClickListener, Ba
private lateinit var detector: BarcodeDetector
private fun navigateUp() {
val intent = parentActivityIntent
if (intent == null || !shouldUpRecreateTask(intent) && !isTaskRoot) finish() else
TaskStackBuilder.create(this).addNextIntentWithParentStack(intent).startActivities()
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
detector = BarcodeDetector.Builder(this)
......@@ -97,12 +89,8 @@ class ScannerActivity : AppCompatActivity(), Toolbar.OnMenuItemClickListener, Ba
return
}
setContentView(R.layout.layout_scanner)
val toolbar = findViewById<Toolbar>(R.id.toolbar)
toolbar.title = title
toolbar.setNavigationIcon(theme.resolveResourceId(R.attr.homeAsUpIndicator))
toolbar.setNavigationOnClickListener { navigateUp() }
toolbar.inflateMenu(R.menu.scanner_menu)
toolbar.setOnMenuItemClickListener(this)
setSupportActionBar(findViewById(R.id.toolbar))
supportActionBar!!.setDisplayHomeAsUpEnabled(true)
val capture = supportFragmentManager.findFragmentById(R.id.barcode) as BarcodeCapture
capture.setCustomDetector(detector)
capture.setRetrieval(this)
......@@ -110,7 +98,7 @@ class ScannerActivity : AppCompatActivity(), Toolbar.OnMenuItemClickListener, Ba
override fun onRetrieved(barcode: Barcode) = runOnUiThread {
Profile.findAllUrls(barcode.rawValue, app.currentProfile).forEach { ProfileManager.createProfile(it) }
navigateUp()
onSupportNavigateUp()
}
override fun onRetrievedMultiple(closetToClick: Barcode?, barcode: MutableList<BarcodeGraphic>?) = check(false)
override fun onBitmapScanned(sparseArray: SparseArray<Barcode>?) { }
......@@ -120,7 +108,11 @@ class ScannerActivity : AppCompatActivity(), Toolbar.OnMenuItemClickListener, Ba
startImport()
}
override fun onMenuItemClick(item: MenuItem) = when (item.itemId) {
override fun onCreateOptionsMenu(menu: Menu?): Boolean {
menuInflater.inflate(R.menu.scanner_menu, menu)
return true
}
override fun onOptionsItemSelected(item: MenuItem?) = when (item?.itemId) {
R.id.action_import_clipboard -> {
startImport(true)
true
......@@ -151,8 +143,8 @@ class ScannerActivity : AppCompatActivity(), Toolbar.OnMenuItemClickListener, Ba
}
Toast.makeText(this, if (success) R.string.action_import_msg else R.string.action_import_err,
Toast.LENGTH_SHORT).show()
navigateUp()
} else if (requestCode == REQUEST_IMPORT_OR_FINISH) navigateUp()
onSupportNavigateUp()
} else if (requestCode == REQUEST_IMPORT_OR_FINISH) onSupportNavigateUp()
else -> super.onActivityResult(requestCode, resultCode, data)
}
}
......
......@@ -30,7 +30,7 @@ import androidx.fragment.app.Fragment
* @author Mygod
*/
open class ToolbarFragment : Fragment() {
protected lateinit var toolbar: Toolbar
lateinit var toolbar: Toolbar
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
......
......@@ -8,14 +8,14 @@
app:showAsAction="never"/>
<item
android:id="@+id/action_export_clipboard"
android:alphabeticShortcut="e"
android:alphabeticShortcut="c"
android:icon="?attr/actionModeCopyDrawable"
android:numericShortcut="2"
android:title="@string/action_export"
app:showAsAction="ifRoom"/>
<item
android:id="@+id/action_import_clipboard"
android:alphabeticShortcut="i"
android:alphabeticShortcut="v"
android:icon="?attr/actionModePasteDrawable"
android:numericShortcut="3"
android:title="@string/action_import"
......
......@@ -3,22 +3,17 @@
xmlns:app="http://schemas.android.com/apk/res-auto">
<item android:title="@string/action_add_rule"
android:icon="@drawable/ic_av_playlist_add"
android:alphabeticShortcut="a"
android:alphabeticShortcut="n"
android:numericShortcut="1"
app:showAsAction="always">
<menu>
<item android:id="@+id/action_manual_settings"
android:title="@string/add_profile_methods_manual_settings"
android:alphabeticShortcut="m"
android:numericShortcut="1"/>
android:title="@string/add_profile_methods_manual_settings"/>
<item android:id="@+id/action_import_clipboard"
android:title="@string/action_import"
android:alphabeticShortcut="i"
android:numericShortcut="2"/>
android:alphabeticShortcut="v"/>
<item android:id="@+id/action_import_gfwlist"
android:title="@string/route_entry_gfwlist"
android:alphabeticShortcut="g"
android:numericShortcut="3"/>
android:title="@string/route_entry_gfwlist"/>
</menu>
</item>
</menu>
......@@ -11,7 +11,7 @@
android:showAsAction="always"/>
<item
android:id="@+id/action_cut"
android:alphabeticShortcut="t"
android:alphabeticShortcut="x"
android:icon="?attr/actionModeCutDrawable"
android:numericShortcut="2"
android:title="@android:string/cut"
......
......@@ -5,12 +5,12 @@
android:title="@string/delete"
android:icon="@drawable/ic_action_delete"
android:alphabeticShortcut="d"
android:numericShortcut="2"
android:numericShortcut="1"
app:showAsAction="always"/>
<item android:id="@+id/action_apply"
android:title="@string/apply"
android:icon="@drawable/ic_action_done"
android:alphabeticShortcut="a"
android:numericShortcut="3"
android:alphabeticShortcut="s"
android:numericShortcut="2"
app:showAsAction="always"/>
</menu>
......@@ -2,50 +2,41 @@
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:alphabeticShortcut="a"
android:alphabeticShortcut="n"
android:icon="@drawable/ic_action_note_add"
android:numericShortcut="0"
android:numericShortcut="1"
android:title="@string/add_profile"
app:showAsAction="always">
<menu>
<item
android:id="@+id/action_scan_qr_code"
android:alphabeticShortcut="s"
android:numericShortcut="1"
android:title="@string/add_profile_methods_scan_qr_code"/>
<item
android:id="@+id/action_import_clipboard"
android:alphabeticShortcut="c"
android:numericShortcut="2"
android:alphabeticShortcut="v"
android:title="@string/action_import"/>
<item
android:id="@+id/action_import_file"
android:alphabeticShortcut="f"
android:numericShortcut="3"
android:alphabeticShortcut="o"
android:title="@string/action_import_file"/>
<item
android:id="@+id/action_manual_settings"
android:alphabeticShortcut="m"
android:numericShortcut="4"
android:title="@string/add_profile_methods_manual_settings"/>
</menu>
</item>
<item
android:alphabeticShortcut="e"
android:alphabeticShortcut="s"
android:icon="@drawable/ic_file_file_upload"
android:numericShortcut="1"
android:title="@string/action_export_more"
android:numericShortcut="2"
app:showAsAction="always">
<menu>
<item
android:id="@+id/action_export_clipboard"
android:alphabeticShortcut="c"
android:numericShortcut="1"
android:title="@string/action_export"/>
<item
android:id="@+id/action_export_file"
android:alphabeticShortcut="f"
android:numericShortcut="2"
android:title="@string/action_export_file"/>
</menu>
</item>
......
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/action_qr_code_nfc"
android:title="@string/share_qr_nfc"
android:alphabeticShortcut="q"
android:numericShortcut="1"/>
android:title="@string/share_qr_nfc"/>
<item android:id="@+id/action_export_clipboard"
android:title="@string/action_export"
android:alphabeticShortcut="e"
android:numericShortcut="2"/>
android:title="@string/action_export"/>
</menu>
......@@ -4,7 +4,7 @@
<item android:id="@+id/action_import_clipboard"
android:title="@string/action_import_file"
android:icon="@drawable/ic_image_photo"
android:alphabeticShortcut="p"
android:alphabeticShortcut="o"
android:numericShortcut="1"
app:showAsAction="always"/>
</menu>
\ No newline at end of file
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment