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