forked from upstream-mirrors/OpenTracks
@@ -323,42 +323,13 @@ limitations under the License.
|
|||||||
</activity>
|
</activity>
|
||||||
|
|
||||||
<activity android:name=".ui.markers.MarkerEditActivity" />
|
<activity android:name=".ui.markers.MarkerEditActivity" />
|
||||||
|
<activity android:name=".ui.markers.MarkerListActivity" />
|
||||||
|
|
||||||
<activity
|
<activity android:name=".TrackListActivity" />
|
||||||
android:name=".ui.markers.MarkerListActivity"
|
|
||||||
android:exported="true"
|
|
||||||
android:label="@string/menu_markers"
|
|
||||||
android:launchMode="singleTop">
|
|
||||||
<intent-filter>
|
|
||||||
<action android:name="android.intent.action.SEARCH" />
|
|
||||||
</intent-filter>
|
|
||||||
<meta-data
|
|
||||||
android:name="android.app.searchable"
|
|
||||||
android:resource="@xml/searchable" />
|
|
||||||
</activity>
|
|
||||||
|
|
||||||
<activity
|
|
||||||
android:name=".TrackListActivity"
|
|
||||||
android:exported="true"
|
|
||||||
android:launchMode="singleTop">
|
|
||||||
<intent-filter>
|
|
||||||
<action android:name="android.intent.action.SEARCH" />
|
|
||||||
</intent-filter>
|
|
||||||
<meta-data
|
|
||||||
android:name="android.app.searchable"
|
|
||||||
android:resource="@xml/searchable" />
|
|
||||||
</activity>
|
|
||||||
|
|
||||||
<activity android:name=".TrackRecordedActivity" />
|
<activity android:name=".TrackRecordedActivity" />
|
||||||
<activity android:name=".TrackStoppedActivity" />
|
<activity android:name=".TrackStoppedActivity" />
|
||||||
|
|
||||||
<activity
|
<activity android:name=".TrackRecordingActivity" />
|
||||||
android:name=".TrackRecordingActivity"
|
|
||||||
android:parentActivityName=".TrackListActivity">
|
|
||||||
<meta-data
|
|
||||||
android:name="android.support.PARENT_ACTIVITY"
|
|
||||||
android:value=".TrackListActivity" />
|
|
||||||
</activity>
|
|
||||||
|
|
||||||
<activity android:name=".TrackEditActivity" />
|
<activity android:name=".TrackEditActivity" />
|
||||||
|
|
||||||
|
|||||||
@@ -16,7 +16,6 @@
|
|||||||
|
|
||||||
package de.dennisguse.opentracks;
|
package de.dennisguse.opentracks;
|
||||||
|
|
||||||
import android.app.SearchManager;
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.content.SharedPreferences.OnSharedPreferenceChangeListener;
|
import android.content.SharedPreferences.OnSharedPreferenceChangeListener;
|
||||||
@@ -26,7 +25,6 @@ import android.location.LocationManager;
|
|||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.provider.Settings;
|
import android.provider.Settings;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
import android.view.KeyEvent;
|
|
||||||
import android.view.Menu;
|
import android.view.Menu;
|
||||||
import android.view.MenuItem;
|
import android.view.MenuItem;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
@@ -34,7 +32,6 @@ import android.widget.Toast;
|
|||||||
|
|
||||||
import androidx.annotation.Nullable;
|
import androidx.annotation.Nullable;
|
||||||
import androidx.appcompat.content.res.AppCompatResources;
|
import androidx.appcompat.content.res.AppCompatResources;
|
||||||
import androidx.appcompat.widget.SearchView;
|
|
||||||
import androidx.core.content.ContextCompat;
|
import androidx.core.content.ContextCompat;
|
||||||
import androidx.recyclerview.widget.LinearLayoutManager;
|
import androidx.recyclerview.widget.LinearLayoutManager;
|
||||||
|
|
||||||
@@ -129,7 +126,6 @@ public class TrackListActivity extends AbstractTrackDeleteActivity implements Co
|
|||||||
};
|
};
|
||||||
|
|
||||||
// Menu items
|
// Menu items
|
||||||
private MenuItem searchMenuItem;
|
|
||||||
|
|
||||||
private String searchQuery;
|
private String searchQuery;
|
||||||
|
|
||||||
@@ -249,6 +245,14 @@ public class TrackListActivity extends AbstractTrackDeleteActivity implements Co
|
|||||||
@Override
|
@Override
|
||||||
protected View getRootView() {
|
protected View getRootView() {
|
||||||
viewBinding = TrackListBinding.inflate(getLayoutInflater());
|
viewBinding = TrackListBinding.inflate(getLayoutInflater());
|
||||||
|
|
||||||
|
viewBinding.trackListSearchView.getEditText().setOnEditorActionListener((v, actionId, event) -> {
|
||||||
|
searchQuery = viewBinding.trackListSearchView.getEditText().getText().toString();
|
||||||
|
viewBinding.trackListSearchView.hide();
|
||||||
|
loadData();
|
||||||
|
return true;
|
||||||
|
});
|
||||||
|
|
||||||
return viewBinding.getRoot();
|
return viewBinding.getRoot();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -256,9 +260,6 @@ public class TrackListActivity extends AbstractTrackDeleteActivity implements Co
|
|||||||
public boolean onCreateOptionsMenu(Menu menu) {
|
public boolean onCreateOptionsMenu(Menu menu) {
|
||||||
getMenuInflater().inflate(R.menu.track_list, menu);
|
getMenuInflater().inflate(R.menu.track_list, menu);
|
||||||
|
|
||||||
searchMenuItem = menu.findItem(R.id.track_list_search);
|
|
||||||
ActivityUtils.configureSearchWidget(this, searchMenuItem);
|
|
||||||
|
|
||||||
return super.onCreateOptionsMenu(menu);
|
return super.onCreateOptionsMenu(menu);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -280,13 +281,6 @@ public class TrackListActivity extends AbstractTrackDeleteActivity implements Co
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (item.getItemId() == R.id.track_list_search) {
|
|
||||||
SearchView searchView = (SearchView) searchMenuItem.getActionView();
|
|
||||||
searchView.setIconified(false);
|
|
||||||
searchMenuItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (item.getItemId() == R.id.track_list_help) {
|
if (item.getItemId() == R.id.track_list_help) {
|
||||||
startActivity(IntentUtils.newIntent(this, HelpActivity.class));
|
startActivity(IntentUtils.newIntent(this, HelpActivity.class));
|
||||||
return true;
|
return true;
|
||||||
@@ -295,42 +289,9 @@ public class TrackListActivity extends AbstractTrackDeleteActivity implements Co
|
|||||||
return super.onOptionsItemSelected(item);
|
return super.onOptionsItemSelected(item);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean onKeyUp(int keyCode, KeyEvent event) {
|
|
||||||
if (keyCode == KeyEvent.KEYCODE_SEARCH && searchMenuItem != null) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return super.onKeyUp(keyCode, event);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onBackPressed() {
|
|
||||||
SearchView searchView = (SearchView) searchMenuItem.getActionView();
|
|
||||||
if (!searchView.isIconified()) {
|
|
||||||
searchView.setIconified(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (searchQuery != null) {
|
|
||||||
searchQuery = null;
|
|
||||||
loadData();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
super.onBackPressed();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void onNewIntent(Intent intent) {
|
|
||||||
super.onNewIntent(intent);
|
|
||||||
|
|
||||||
if (Intent.ACTION_SEARCH.equals(intent.getAction())) {
|
|
||||||
searchQuery = intent.getStringExtra(SearchManager.QUERY);
|
|
||||||
} else {
|
|
||||||
searchQuery = null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void loadData() {
|
private void loadData() {
|
||||||
|
viewBinding.trackListToolbar.setText(searchQuery);
|
||||||
|
|
||||||
viewBinding.trackListToolbar.setTitle(Objects.requireNonNullElseGet(searchQuery, () -> getString(R.string.app_name)));
|
viewBinding.trackListToolbar.setTitle(Objects.requireNonNullElseGet(searchQuery, () -> getString(R.string.app_name)));
|
||||||
|
|
||||||
Cursor tracks = new ContentProviderUtils(this).searchTracks(searchQuery);
|
Cursor tracks = new ContentProviderUtils(this).searchTracks(searchQuery);
|
||||||
|
|||||||
@@ -110,15 +110,6 @@ public class TrackStoppedActivity extends AbstractTrackDeleteActivity implements
|
|||||||
contentProviderUtils);
|
contentProviderUtils);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onBackPressed() {
|
|
||||||
if (isDiscarding) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
super.onBackPressed();
|
|
||||||
resumeTrackAndFinish();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected View getRootView() {
|
protected View getRootView() {
|
||||||
viewBinding = TrackStoppedBinding.inflate(getLayoutInflater());
|
viewBinding = TrackStoppedBinding.inflate(getLayoutInflater());
|
||||||
|
|||||||
@@ -16,7 +16,6 @@
|
|||||||
|
|
||||||
package de.dennisguse.opentracks.ui.markers;
|
package de.dennisguse.opentracks.ui.markers;
|
||||||
|
|
||||||
import android.app.SearchManager;
|
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.view.Menu;
|
import android.view.Menu;
|
||||||
@@ -25,7 +24,6 @@ import android.view.View;
|
|||||||
|
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
import androidx.annotation.UiThread;
|
import androidx.annotation.UiThread;
|
||||||
import androidx.appcompat.widget.SearchView;
|
|
||||||
import androidx.recyclerview.widget.LinearLayoutManager;
|
import androidx.recyclerview.widget.LinearLayoutManager;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@@ -95,7 +93,6 @@ public class MarkerListActivity extends AbstractActivity implements DeleteMarker
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
private MenuItem insertMarkerMenuItem;
|
private MenuItem insertMarkerMenuItem;
|
||||||
private MenuItem searchMenuItem;
|
|
||||||
|
|
||||||
private String searchQuery;
|
private String searchQuery;
|
||||||
|
|
||||||
@@ -153,6 +150,14 @@ public class MarkerListActivity extends AbstractActivity implements DeleteMarker
|
|||||||
@Override
|
@Override
|
||||||
protected View getRootView() {
|
protected View getRootView() {
|
||||||
viewBinding = MarkerListBinding.inflate(getLayoutInflater());
|
viewBinding = MarkerListBinding.inflate(getLayoutInflater());
|
||||||
|
|
||||||
|
viewBinding.markerListSearchView.getEditText().setOnEditorActionListener((v, actionId, event) -> {
|
||||||
|
searchQuery = viewBinding.markerListSearchView.getEditText().getText().toString();
|
||||||
|
viewBinding.markerListSearchView.hide();
|
||||||
|
loadData();
|
||||||
|
return true;
|
||||||
|
});
|
||||||
|
|
||||||
return viewBinding.getRoot();
|
return viewBinding.getRoot();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -162,9 +167,6 @@ public class MarkerListActivity extends AbstractActivity implements DeleteMarker
|
|||||||
|
|
||||||
insertMarkerMenuItem = menu.findItem(R.id.marker_list_insert_marker);
|
insertMarkerMenuItem = menu.findItem(R.id.marker_list_insert_marker);
|
||||||
|
|
||||||
searchMenuItem = menu.findItem(R.id.marker_list_search);
|
|
||||||
ActivityUtils.configureSearchWidget(this, searchMenuItem);
|
|
||||||
|
|
||||||
return super.onCreateOptionsMenu(menu);
|
return super.onCreateOptionsMenu(menu);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -236,35 +238,10 @@ public class MarkerListActivity extends AbstractActivity implements DeleteMarker
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onBackPressed() {
|
|
||||||
SearchView searchView = (SearchView) searchMenuItem.getActionView();
|
|
||||||
if (!searchView.isIconified()) {
|
|
||||||
searchView.setIconified(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (searchQuery != null) {
|
|
||||||
searchQuery = null;
|
|
||||||
loadData();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
super.onBackPressed();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void onNewIntent(Intent intent) {
|
|
||||||
super.onNewIntent(intent);
|
|
||||||
|
|
||||||
if (Intent.ACTION_SEARCH.equals(intent.getAction())) {
|
|
||||||
searchQuery = intent.getStringExtra(SearchManager.QUERY);
|
|
||||||
} else {
|
|
||||||
searchQuery = null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@UiThread
|
@UiThread
|
||||||
private void loadData() {
|
private void loadData() {
|
||||||
|
viewBinding.markerListToolbar.setText(searchQuery);
|
||||||
|
|
||||||
viewBinding.markerListToolbar.setTitle(Objects.requireNonNullElseGet(searchQuery, () -> getString(R.string.menu_markers)));
|
viewBinding.markerListToolbar.setTitle(Objects.requireNonNullElseGet(searchQuery, () -> getString(R.string.menu_markers)));
|
||||||
|
|
||||||
List<Marker> markers = contentProviderUtils.searchMarkers(trackId, searchQuery);
|
List<Marker> markers = contentProviderUtils.searchMarkers(trackId, searchQuery);
|
||||||
|
|||||||
@@ -2,18 +2,13 @@ package de.dennisguse.opentracks.ui.util;
|
|||||||
|
|
||||||
import static android.content.Context.VIBRATOR_SERVICE;
|
import static android.content.Context.VIBRATOR_SERVICE;
|
||||||
|
|
||||||
import android.app.Activity;
|
|
||||||
import android.app.SearchManager;
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.os.Build;
|
import android.os.Build;
|
||||||
import android.os.VibrationEffect;
|
import android.os.VibrationEffect;
|
||||||
import android.os.Vibrator;
|
import android.os.Vibrator;
|
||||||
import android.util.Log;
|
|
||||||
import android.view.Menu;
|
import android.view.Menu;
|
||||||
import android.view.MenuItem;
|
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
import androidx.appcompat.widget.SearchView;
|
|
||||||
|
|
||||||
import java.time.Duration;
|
import java.time.Duration;
|
||||||
|
|
||||||
@@ -21,19 +16,6 @@ public class ActivityUtils {
|
|||||||
|
|
||||||
private static final String TAG = ActivityUtils.class.getSimpleName();
|
private static final String TAG = ActivityUtils.class.getSimpleName();
|
||||||
|
|
||||||
public static SearchView configureSearchWidget(Activity activity, final MenuItem menuItem) {
|
|
||||||
final SearchView searchView = (SearchView) menuItem.getActionView();
|
|
||||||
SearchManager searchManager = (SearchManager) activity.getSystemService(Context.SEARCH_SERVICE);
|
|
||||||
if (searchManager != null) {
|
|
||||||
//NOTE: Use searchManager.getSearchableInfo(new ComponentName(activity, SearchActivity.class)) if another activity should handle the search
|
|
||||||
searchView.setSearchableInfo(searchManager.getSearchableInfo(activity.getComponentName()));
|
|
||||||
} else {
|
|
||||||
Log.w(TAG, "Could not retrieve SearchManager.");
|
|
||||||
}
|
|
||||||
searchView.setSubmitButtonEnabled(true);
|
|
||||||
return searchView;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void vibrate(@NonNull Context context, Duration duration) {
|
public static void vibrate(@NonNull Context context, Duration duration) {
|
||||||
final Vibrator vibrator = (Vibrator) context.getSystemService(VIBRATOR_SERVICE);
|
final Vibrator vibrator = (Vibrator) context.getSystemService(VIBRATOR_SERVICE);
|
||||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
|
||||||
|
|||||||
@@ -22,14 +22,24 @@ limitations under the License.
|
|||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content">
|
android:layout_height="wrap_content">
|
||||||
|
|
||||||
<com.google.android.material.appbar.MaterialToolbar
|
<com.google.android.material.search.SearchBar
|
||||||
android:id="@+id/marker_list_toolbar"
|
android:id="@+id/marker_list_toolbar"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="?attr/actionBarSize"
|
android:layout_height="?attr/actionBarSize"
|
||||||
app:navigationIcon="@drawable/ic_marker_show_24dp"
|
app:navigationIcon="@drawable/ic_marker_show_24dp"
|
||||||
app:title="@string/menu_markers" />
|
app:layout_behavior="@string/searchbar_scrolling_view_behavior"
|
||||||
|
app:menu="@menu/marker_list" />
|
||||||
</com.google.android.material.appbar.AppBarLayout>
|
</com.google.android.material.appbar.AppBarLayout>
|
||||||
|
|
||||||
|
<com.google.android.material.search.SearchView
|
||||||
|
android:id="@+id/marker_list_search_view"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:hint="@string/menu_search"
|
||||||
|
app:layout_anchor="@id/marker_list_toolbar">
|
||||||
|
<!-- Search suggestions/results go here (ScrollView, RecyclerView, etc.). -->
|
||||||
|
</com.google.android.material.search.SearchView>
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
|
|||||||
@@ -22,15 +22,24 @@ limitations under the License.
|
|||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content">
|
android:layout_height="wrap_content">
|
||||||
|
|
||||||
<com.google.android.material.appbar.MaterialToolbar
|
<com.google.android.material.search.SearchBar
|
||||||
android:id="@+id/track_list_toolbar"
|
android:id="@+id/track_list_toolbar"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="?attr/actionBarSize"
|
android:layout_height="?attr/actionBarSize"
|
||||||
app:navigationIcon="@drawable/ic_logo_color_24dp"
|
app:navigationIcon="@drawable/ic_logo_color_24dp"
|
||||||
app:title="@string/app_name"
|
app:layout_behavior="@string/searchbar_scrolling_view_behavior"
|
||||||
app:menu="@menu/track_list" />
|
app:menu="@menu/track_list" />
|
||||||
</com.google.android.material.appbar.AppBarLayout>
|
</com.google.android.material.appbar.AppBarLayout>
|
||||||
|
|
||||||
|
<com.google.android.material.search.SearchView
|
||||||
|
android:id="@+id/track_list_search_view"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:hint="@string/menu_search"
|
||||||
|
app:layout_anchor="@id/track_list_toolbar">
|
||||||
|
<!-- Search suggestions/results go here (ScrollView, RecyclerView, etc.). -->
|
||||||
|
</com.google.android.material.search.SearchView>
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
|
|||||||
@@ -17,12 +17,7 @@ limitations under the License.
|
|||||||
xmlns:app="http://schemas.android.com/apk/res-auto">
|
xmlns:app="http://schemas.android.com/apk/res-auto">
|
||||||
<item
|
<item
|
||||||
android:id="@+id/marker_list_insert_marker"
|
android:id="@+id/marker_list_insert_marker"
|
||||||
android:icon="@drawable/ic_marker_show_24dp"
|
android:icon="@drawable/ic_marker_add_24dp"
|
||||||
android:title="@string/menu_insert_marker"
|
android:title="@string/menu_insert_marker"
|
||||||
app:showAsAction="ifRoom" />
|
app:showAsAction="ifRoom" />
|
||||||
<item
|
|
||||||
android:id="@+id/marker_list_search"
|
|
||||||
android:title="@string/menu_search"
|
|
||||||
app:actionViewClass="androidx.appcompat.widget.SearchView"
|
|
||||||
app:showAsAction="ifRoom" />
|
|
||||||
</menu>
|
</menu>
|
||||||
@@ -15,12 +15,6 @@ limitations under the License.
|
|||||||
-->
|
-->
|
||||||
<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">
|
||||||
<!-- TODO SearchAction is only working if it is shown as action. However, only two slots are available. See #757. -->
|
|
||||||
<item
|
|
||||||
android:id="@+id/track_list_search"
|
|
||||||
android:title="@string/menu_search"
|
|
||||||
app:actionViewClass="androidx.appcompat.widget.SearchView"
|
|
||||||
app:showAsAction="ifRoom" />
|
|
||||||
<item
|
<item
|
||||||
android:id="@+id/track_list_markers"
|
android:id="@+id/track_list_markers"
|
||||||
android:icon="@drawable/ic_marker_show_24dp"
|
android:icon="@drawable/ic_marker_show_24dp"
|
||||||
@@ -29,7 +23,8 @@ limitations under the License.
|
|||||||
<item
|
<item
|
||||||
android:id="@+id/track_list_settings"
|
android:id="@+id/track_list_settings"
|
||||||
android:icon="@drawable/ic_settings_24dp"
|
android:icon="@drawable/ic_settings_24dp"
|
||||||
android:title="@string/menu_settings" />
|
android:title="@string/menu_settings"
|
||||||
|
app:showAsAction="ifRoom" />
|
||||||
<item
|
<item
|
||||||
android:id="@+id/track_list_help"
|
android:id="@+id/track_list_help"
|
||||||
android:icon="@drawable/ic_help_24dp"
|
android:icon="@drawable/ic_help_24dp"
|
||||||
|
|||||||
Reference in New Issue
Block a user