From cbb839ec113d4d7c04bea67d86cebb113cb4e837 Mon Sep 17 00:00:00 2001 From: Mygod Date: Thu, 3 Nov 2016 20:50:53 +0800 Subject: [PATCH] Fix up navigation --- src/main/res/layout/layout_scanner.xml | 19 +++---- .../com/github/shadowsocks/AppManager.scala | 7 ++- .../shadowsocks/ProfileManagerActivity.scala | 8 +-- .../github/shadowsocks/ScannerActivity.scala | 53 +++++++------------ 4 files changed, 38 insertions(+), 49 deletions(-) diff --git a/src/main/res/layout/layout_scanner.xml b/src/main/res/layout/layout_scanner.xml index cd15bef3..ae575a39 100644 --- a/src/main/res/layout/layout_scanner.xml +++ b/src/main/res/layout/layout_scanner.xml @@ -1,15 +1,12 @@ - - - - - + android:layout_height="match_parent" + android:orientation="vertical"> - + + diff --git a/src/main/scala/com/github/shadowsocks/AppManager.scala b/src/main/scala/com/github/shadowsocks/AppManager.scala index 7a4cfa3f..938c1150 100644 --- a/src/main/scala/com/github/shadowsocks/AppManager.scala +++ b/src/main/scala/com/github/shadowsocks/AppManager.scala @@ -42,6 +42,7 @@ package com.github.shadowsocks import java.util.concurrent.atomic.AtomicBoolean import android.Manifest.permission +import android.app.TaskStackBuilder import android.content._ import android.content.pm.PackageManager import android.graphics.drawable.Drawable @@ -220,9 +221,11 @@ class AppManager extends AppCompatActivity with OnMenuItemClickListener { toolbar = findViewById(R.id.toolbar).asInstanceOf[Toolbar] toolbar.setTitle(R.string.proxied_apps) toolbar.setNavigationIcon(R.drawable.abc_ic_ab_back_material) - toolbar.setNavigationOnClickListener((v: View) => { + toolbar.setNavigationOnClickListener(_ => { val intent = getParentActivityIntent - if (intent == null) finish else navigateUpTo(intent) + if (shouldUpRecreateTask(intent) || isTaskRoot) + TaskStackBuilder.create(this).addNextIntentWithParentStack(intent).startActivities() + else finish() }) toolbar.inflateMenu(R.menu.app_manager_menu) toolbar.setOnMenuItemClickListener(this) diff --git a/src/main/scala/com/github/shadowsocks/ProfileManagerActivity.scala b/src/main/scala/com/github/shadowsocks/ProfileManagerActivity.scala index 5edded94..f75f7aac 100644 --- a/src/main/scala/com/github/shadowsocks/ProfileManagerActivity.scala +++ b/src/main/scala/com/github/shadowsocks/ProfileManagerActivity.scala @@ -2,7 +2,7 @@ package com.github.shadowsocks import java.nio.charset.Charset -import android.app.Activity +import android.app.{Activity, TaskStackBuilder} import android.content._ import android.content.pm.PackageManager import android.nfc.NfcAdapter.CreateNdefMessageCallback @@ -203,9 +203,11 @@ final class ProfileManagerActivity extends AppCompatActivity with OnMenuItemClic val toolbar = findViewById(R.id.toolbar).asInstanceOf[Toolbar] toolbar.setTitle(R.string.profiles) toolbar.setNavigationIcon(R.drawable.ic_navigation_close) - toolbar.setNavigationOnClickListener((v: View) => { + toolbar.setNavigationOnClickListener(_ => { val intent = getParentActivityIntent - if (intent == null) finish else navigateUpTo(intent) + if (shouldUpRecreateTask(intent) || isTaskRoot) + TaskStackBuilder.create(this).addNextIntentWithParentStack(intent).startActivities() + else finish() }) toolbar.inflateMenu(R.menu.profile_manager_menu) toolbar.setOnMenuItemClickListener(this) diff --git a/src/main/scala/com/github/shadowsocks/ScannerActivity.scala b/src/main/scala/com/github/shadowsocks/ScannerActivity.scala index 5cf1144c..064ca04d 100644 --- a/src/main/scala/com/github/shadowsocks/ScannerActivity.scala +++ b/src/main/scala/com/github/shadowsocks/ScannerActivity.scala @@ -1,6 +1,6 @@ package com.github.shadowsocks -import android.app.Activity +import android.app.{Activity, TaskStackBuilder} import android.content.Intent import android.content.pm.{PackageManager, ShortcutManager} import android.os.{Build, Bundle} @@ -8,16 +8,18 @@ import android.support.v4.app.ActivityCompat import android.support.v4.content.ContextCompat import android.support.v7.app.AppCompatActivity import android.support.v7.widget.Toolbar -import android.view.{MenuItem, ViewGroup} import android.widget.Toast import com.google.zxing.Result import me.dm7.barcodescanner.zxing.ZXingScannerView +object ScannerActivity { + private final val MY_PERMISSIONS_REQUEST_CAMERA = 1 +} + class ScannerActivity extends AppCompatActivity with ZXingScannerView.ResultHandler { + import ScannerActivity._ - val MY_PERMISSIONS_REQUEST_CAMERA = 1 - - var scannerView: ZXingScannerView = _ + private var scannerView: ZXingScannerView = _ override def onRequestPermissionsResult(requestCode: Int, permissions: Array[String], grantResults: Array[Int]) { @@ -34,14 +36,21 @@ class ScannerActivity extends AppCompatActivity with ZXingScannerView.ResultHand } } + def navigateUp() { + val intent = getParentActivityIntent + if (shouldUpRecreateTask(intent) || isTaskRoot) + TaskStackBuilder.create(this).addNextIntentWithParentStack(intent).startActivities() + else finish() + } + override def onCreate(state: Bundle) { super.onCreate(state) setContentView(R.layout.layout_scanner) - setupToolbar() - - scannerView = new ZXingScannerView(this) - val contentFrame = findViewById(R.id.content_frame).asInstanceOf[ViewGroup] - contentFrame.addView(scannerView) + val toolbar = findViewById(R.id.toolbar).asInstanceOf[Toolbar] + toolbar.setTitle(getTitle) + toolbar.setNavigationIcon(R.drawable.abc_ic_ab_back_material) + toolbar.setNavigationOnClickListener(_ => navigateUp()) + scannerView = findViewById(R.id.scanner).asInstanceOf[ZXingScannerView] if (Build.VERSION.SDK_INT >= 25) getSystemService(classOf[ShortcutManager]).reportShortcutUsed("scan") } @@ -67,29 +76,7 @@ class ScannerActivity extends AppCompatActivity with ZXingScannerView.ResultHand val intent = new Intent() intent.putExtra("uri", rawResult.getText) setResult(Activity.RESULT_OK, intent) - navigateUpTo(getParentActivityIntent) + navigateUp() } - - def setupToolbar() { - val toolbar = findViewById(R.id.toolbar).asInstanceOf[Toolbar] - setSupportActionBar(toolbar) - val ab = getSupportActionBar() - if (ab != null) { - ab.setDisplayHomeAsUpEnabled(true) - } - } - - override def onOptionsItemSelected(item: MenuItem): Boolean = { - item.getItemId() match { - // Respond to the action bar's Up/Home button - case android.R.id.home => - setResult(Activity.RESULT_CANCELED, new Intent()) - finish() - return true - case _ => // Do nothing - } - return super.onOptionsItemSelected(item) - } - }