From 3556eebfeb09b30d5bd6dccc0e0c005feb916163 Mon Sep 17 00:00:00 2001 From: Mygod Date: Mon, 8 Feb 2016 15:06:53 +0800 Subject: [PATCH] Tasker: scroll to selected profile --- .../github/shadowsocks/ProfileManagerActivity.scala | 11 ++++------- .../scala/com/github/shadowsocks/TaskerActivity.scala | 8 ++++++-- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/src/main/scala/com/github/shadowsocks/ProfileManagerActivity.scala b/src/main/scala/com/github/shadowsocks/ProfileManagerActivity.scala index 20e5e882..55423e0a 100644 --- a/src/main/scala/com/github/shadowsocks/ProfileManagerActivity.scala +++ b/src/main/scala/com/github/shadowsocks/ProfileManagerActivity.scala @@ -76,12 +76,11 @@ class ProfileManagerActivity extends AppCompatActivity with OnMenuItemClickListe handler.post(() => text.setText(builder)) } - def bind(item: Profile, i: Int) { + def bind(item: Profile) { this.item = item updateText() if (item.id == ShadowsocksApplication.profileId) { text.setChecked(true) - selectedIndex = i selectedItem = this } else { text.setChecked(false) @@ -102,7 +101,7 @@ class ProfileManagerActivity extends AppCompatActivity with OnMenuItemClickListe def getItemCount = profiles.length - def onBindViewHolder(vh: ProfileViewHolder, i: Int) = vh.bind(profiles(i), i) + def onBindViewHolder(vh: ProfileViewHolder, i: Int) = vh.bind(profiles(i)) def onCreateViewHolder(vg: ViewGroup, i: Int) = new ProfileViewHolder(LayoutInflater.from(vg.getContext).inflate(R.layout.layout_profiles_item, vg, false)) @@ -154,7 +153,6 @@ class ProfileManagerActivity extends AppCompatActivity with OnMenuItemClickListe } } - private var selectedIndex = -1 private var selectedItem: ProfileViewHolder = _ private val handler = new Handler @@ -181,10 +179,9 @@ class ProfileManagerActivity extends AppCompatActivity with OnMenuItemClickListe profilesList.setLayoutManager(layoutManager) profilesList.setItemAnimator(new DefaultItemAnimator) profilesList.setAdapter(profilesAdapter) - if (selectedIndex < 0) selectedIndex = profilesAdapter.profiles.zipWithIndex.collectFirst { + layoutManager.scrollToPosition(profilesAdapter.profiles.zipWithIndex.collectFirst { case (profile, i) if profile.id == ShadowsocksApplication.profileId => i - }.getOrElse(-1) - layoutManager.scrollToPosition(selectedIndex) + }.getOrElse(-1)) removedSnackbar = Snackbar.make(profilesList, R.string.removed, Snackbar.LENGTH_LONG) .setAction(R.string.undo, ((v: View) => profilesAdapter.undoRemoves): OnClickListener) removedSnackbar.getView.addOnAttachStateChangeListener(new OnAttachStateChangeListener { diff --git a/src/main/scala/com/github/shadowsocks/TaskerActivity.scala b/src/main/scala/com/github/shadowsocks/TaskerActivity.scala index 8f0c40f5..e40426d8 100644 --- a/src/main/scala/com/github/shadowsocks/TaskerActivity.scala +++ b/src/main/scala/com/github/shadowsocks/TaskerActivity.scala @@ -82,7 +82,7 @@ class TaskerActivity extends AppCompatActivity { } private class ProfilesAdapter extends RecyclerView.Adapter[ProfileViewHolder] { - private val profiles = ShadowsocksApplication.profileManager.getAllProfiles.getOrElse(List.empty[Profile]) + val profiles = ShadowsocksApplication.profileManager.getAllProfiles.getOrElse(List.empty[Profile]) def getItemCount = 1 + profiles.length def onBindViewHolder(vh: ProfileViewHolder, i: Int) = i match { case 0 => vh.bindDefault @@ -110,9 +110,13 @@ class TaskerActivity extends AppCompatActivity { switch = findViewById(R.id.serviceSwitch).asInstanceOf[Switch] switch.setChecked(taskerOption.switchOn) val profilesList = findViewById(R.id.profilesList).asInstanceOf[RecyclerView] - profilesList.setLayoutManager(new LinearLayoutManager(this)) + val lm = new LinearLayoutManager(this) + profilesList.setLayoutManager(lm) profilesList.setItemAnimator(new DefaultItemAnimator) profilesList.setAdapter(profilesAdapter) + if (taskerOption.profileId >= 0) lm.scrollToPosition(profilesAdapter.profiles.zipWithIndex.collectFirst { + case (profile, i) if profile.id == taskerOption.profileId => i + 1 + }.getOrElse(0)) } }