Update Search UI

pull/102/head
FongMi 4 years ago
parent abb06ca71f
commit 0d8d3ca81c
  1. 115
      app/src/leanback/java/com/fongmi/android/tv/ui/activity/SearchActivity.java
  2. 2
      app/src/leanback/java/com/fongmi/android/tv/ui/adapter/KeyboardAdapter.java
  3. 10
      app/src/leanback/java/com/fongmi/android/tv/ui/custom/CustomEditText.java
  4. 16
      app/src/leanback/java/com/fongmi/android/tv/ui/custom/CustomKeyboard.java
  5. 6
      app/src/leanback/java/com/fongmi/android/tv/ui/custom/CustomRowPresenter.java
  6. 5
      app/src/leanback/java/com/fongmi/android/tv/ui/custom/dialog/HistoryDialog.java
  7. 10
      app/src/leanback/res/drawable/ic_keyboard_space.xml
  8. 10
      app/src/leanback/res/drawable/ic_keyboard_voice.xml
  9. 10
      app/src/leanback/res/drawable/ic_voice.xml
  10. 116
      app/src/leanback/res/layout/activity_search.xml
  11. 3
      app/src/leanback/res/layout/adapter_config.xml
  12. 2
      app/src/leanback/res/layout/adapter_keyboard_icon.xml
  13. 2
      app/src/leanback/res/layout/adapter_keyboard_text.xml
  14. 4
      app/src/leanback/res/layout/dialog_history.xml
  15. 7
      app/src/leanback/res/values-zh-rCN/strings.xml
  16. 7
      app/src/leanback/res/values-zh-rTW/strings.xml
  17. 5
      app/src/leanback/res/values/strings.xml
  18. 4
      app/src/main/java/com/fongmi/android/tv/player/ParseTask.java

@ -1,7 +1,6 @@
package com.fongmi.android.tv.ui.activity;
import android.Manifest;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.Intent;
import android.content.pm.PackageManager;
@ -12,7 +11,6 @@ import android.speech.SpeechRecognizer;
import android.text.Editable;
import android.text.TextUtils;
import android.view.View;
import android.view.ViewGroup;
import android.view.animation.Animation;
import android.view.inputmethod.EditorInfo;
@ -21,7 +19,6 @@ import androidx.activity.result.contract.ActivityResultContracts;
import androidx.annotation.NonNull;
import androidx.core.content.ContextCompat;
import androidx.leanback.widget.ArrayObjectAdapter;
import androidx.leanback.widget.HorizontalGridView;
import androidx.leanback.widget.ItemBridgeAdapter;
import androidx.viewbinding.ViewBinding;
@ -33,11 +30,13 @@ import com.fongmi.android.tv.net.Callback;
import com.fongmi.android.tv.net.OKHttp;
import com.fongmi.android.tv.ui.custom.CustomKeyboard;
import com.fongmi.android.tv.ui.custom.CustomListener;
import com.fongmi.android.tv.ui.custom.SpaceItemDecoration;
import com.fongmi.android.tv.ui.presenter.WordPresenter;
import com.fongmi.android.tv.utils.ResUtil;
import com.fongmi.android.tv.utils.Utils;
import java.io.IOException;
import java.util.Arrays;
import java.util.List;
import okhttp3.Call;
@ -48,15 +47,12 @@ public class SearchActivity extends BaseActivity implements WordPresenter.OnClic
private final ActivityResultLauncher<String> launcherString = registerForActivityResult(new ActivityResultContracts.RequestPermission(), isGranted -> onVoice());
private ActivitySearchBinding mBinding;
private ArrayObjectAdapter mHistoryAdapter;
private ArrayObjectAdapter mWordAdapter;
private SpeechRecognizer mRecognizer;
private Animation mFlicker;
private Handler mHandler;
private boolean hasVoice() {
return SpeechRecognizer.isRecognitionAvailable(this);
}
public static void start(Activity activity) {
activity.startActivity(new Intent(activity, SearchActivity.class));
}
@ -71,7 +67,6 @@ public class SearchActivity extends BaseActivity implements WordPresenter.OnClic
mFlicker = ResUtil.getAnim(R.anim.flicker);
mHandler = new Handler(Looper.getMainLooper());
mRecognizer = SpeechRecognizer.createSpeechRecognizer(this);
mBinding.voice.setVisibility(hasVoice() ? View.VISIBLE : View.GONE);
CustomKeyboard.init(this, mBinding);
mBinding.keyword.requestFocus();
setRecyclerView();
@ -80,7 +75,6 @@ public class SearchActivity extends BaseActivity implements WordPresenter.OnClic
@Override
protected void initEvent() {
mBinding.voice.setOnClickListener(view -> onVoice());
mBinding.keyword.setOnEditorActionListener((textView, actionId, event) -> {
if (actionId == EditorInfo.IME_ACTION_DONE) onSearch();
return true;
@ -95,30 +89,49 @@ public class SearchActivity extends BaseActivity implements WordPresenter.OnClic
mRecognizer.setRecognitionListener(new CustomListener() {
@Override
public void onResults(String result) {
mBinding.voice.clearAnimation();
stopListening();
mBinding.keyword.setText(result);
mBinding.keyword.setSelection(mBinding.keyword.length());
}
});
}
@SuppressLint("RestrictedApi")
private void setRecyclerView() {
mBinding.word.setHorizontalSpacing(ResUtil.dp2px(16));
mBinding.word.setRowHeight(ViewGroup.LayoutParams.WRAP_CONTENT);
mBinding.word.setFocusScrollStrategy(HorizontalGridView.FOCUS_SCROLL_ITEM);
mBinding.word.setHasFixedSize(true);
mBinding.history.setHasFixedSize(true);
mBinding.word.addItemDecoration(new SpaceItemDecoration(1, 16));
mBinding.history.addItemDecoration(new SpaceItemDecoration(1, 16));
mBinding.word.setAdapter(new ItemBridgeAdapter(mWordAdapter = new ArrayObjectAdapter(new WordPresenter(this))));
mBinding.history.setAdapter(new ItemBridgeAdapter(mHistoryAdapter = new ArrayObjectAdapter(new WordPresenter(this))));
mHistoryAdapter.setItems(Arrays.asList("測試1測試1", "測試2測試2", "測試3"), null);
}
private void onVoice() {
if (ContextCompat.checkSelfPermission(this, Manifest.permission.RECORD_AUDIO) != PackageManager.PERMISSION_GRANTED) {
launcherString.launch(Manifest.permission.RECORD_AUDIO);
} else {
Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
mBinding.voice.startAnimation(mFlicker);
mRecognizer.startListening(intent);
}
private void getHot() {
mBinding.hint.setText(R.string.search_hot);
OKHttp.newCall("https://node.video.qq.com/x/api/hot_mobilesearch?channdlId=0").enqueue(new Callback() {
@Override
public void onResponse(@NonNull Call call, @NonNull Response response) throws IOException {
List<String> items = Hot.get(response.body().string());
mHandler.post(() -> mWordAdapter.setItems(items, null));
}
});
}
private void getSuggest(String text) {
mBinding.hint.setText(R.string.search_suggest);
OKHttp.newCall("https://suggest.video.iqiyi.com/?if=mobile&key=" + text).enqueue(new Callback() {
@Override
public void onResponse(@NonNull Call call, @NonNull Response response) throws IOException {
List<String> items = Suggest.get(response.body().string());
mHandler.post(() -> mWordAdapter.setItems(items, null));
}
});
}
@Override
public void onItemClick(String text) {
mBinding.keyword.setText(text);
onSearch();
}
@Override
@ -136,34 +149,50 @@ public class SearchActivity extends BaseActivity implements WordPresenter.OnClic
}
@Override
public void onItemClick(String text) {
mBinding.keyword.setText(text);
onSearch();
public void onVoice() {
if (ContextCompat.checkSelfPermission(this, Manifest.permission.RECORD_AUDIO) != PackageManager.PERMISSION_GRANTED) {
launcherString.launch(Manifest.permission.RECORD_AUDIO);
} else {
startListening();
}
}
private void getHot() {
OKHttp.newCall("https://node.video.qq.com/x/api/hot_mobilesearch?channdlId=0").enqueue(new Callback() {
@Override
public void onResponse(@NonNull Call call, @NonNull Response response) throws IOException {
List<String> items = Hot.get(response.body().string());
mHandler.post(() -> mWordAdapter.setItems(items, null));
}
});
private void startListening() {
Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
mBinding.keyboard.setVisibility(View.INVISIBLE);
mBinding.voice.setVisibility(View.VISIBLE);
mBinding.voice.startAnimation(mFlicker);
mRecognizer.startListening(intent);
}
private void getSuggest(String text) {
OKHttp.newCall("https://suggest.video.iqiyi.com/?if=mobile&key=" + text).enqueue(new Callback() {
@Override
public void onResponse(@NonNull Call call, @NonNull Response response) throws IOException {
List<String> items = Suggest.get(response.body().string());
mHandler.post(() -> mWordAdapter.setItems(items, null));
}
});
private void stopListening() {
mBinding.keyboard.setVisibility(View.VISIBLE);
mBinding.voice.setVisibility(View.GONE);
mBinding.voice.clearAnimation();
mRecognizer.stopListening();
}
private void destroyRecognizer() {
try {
mRecognizer.destroy();
mRecognizer = null;
} catch (Exception ignored) {
}
}
@Override
public void onBackPressed() {
if (mBinding.voice.getVisibility() == View.VISIBLE) {
stopListening();
} else {
super.onBackPressed();
}
}
@Override
protected void onDestroy() {
super.onDestroy();
mRecognizer.destroy();
destroyRecognizer();
}
}

@ -20,7 +20,7 @@ public class KeyboardAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolde
private final List<Object> mItems;
public KeyboardAdapter(OnClickListener listener) {
this.mItems = Arrays.asList("1", "2", "3", "4", "5", "6", "7", "8", "9", "0", ",", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "。", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", R.drawable.ic_keyboard_remote, "U", "V", "W", "X", "Y", "Z", R.drawable.ic_keyboard_space, R.drawable.ic_keyboard_left, R.drawable.ic_keyboard_right, R.drawable.ic_keyboard_back, R.drawable.ic_keyboard_search);
this.mItems = Arrays.asList(R.drawable.ic_keyboard_remote, R.drawable.ic_keyboard_voice, R.drawable.ic_keyboard_left, R.drawable.ic_keyboard_right, R.drawable.ic_keyboard_back, R.drawable.ic_keyboard_search, "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9");
this.mListener = listener;
}

@ -1,16 +1,12 @@
package com.fongmi.android.tv.ui.custom;
import android.content.Context;
import android.content.res.ColorStateList;
import android.graphics.Rect;
import android.util.AttributeSet;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.widget.AppCompatEditText;
import com.fongmi.android.tv.R;
public class CustomEditText extends AppCompatEditText {
public CustomEditText(@NonNull Context context) {
@ -29,10 +25,4 @@ public class CustomEditText extends AppCompatEditText {
public boolean isFocused() {
return true;
}
@Override
protected void onFocusChanged(boolean focused, int direction, Rect previouslyFocusedRect) {
super.onFocusChanged(focused, direction, previouslyFocusedRect);
setBackgroundTintList(ColorStateList.valueOf(getResources().getColor(focused ? R.color.white : R.color.transparent)));
}
}

@ -9,7 +9,7 @@ import com.fongmi.android.tv.ui.adapter.KeyboardAdapter;
public class CustomKeyboard implements KeyboardAdapter.OnClickListener {
private final ActivitySearchBinding binding;
private Callback callback;
private final Callback callback;
public static void init(Callback callback, ActivitySearchBinding binding) {
new CustomKeyboard(callback, binding).initView();
@ -22,7 +22,7 @@ public class CustomKeyboard implements KeyboardAdapter.OnClickListener {
private void initView() {
binding.keyboard.setHasFixedSize(true);
binding.keyboard.addItemDecoration(new SpaceItemDecoration(11, 8));
binding.keyboard.addItemDecoration(new SpaceItemDecoration(6, 8));
binding.keyboard.setAdapter(new KeyboardAdapter(this));
}
@ -42,11 +42,6 @@ public class CustomKeyboard implements KeyboardAdapter.OnClickListener {
StringBuilder sb = new StringBuilder(binding.keyword.getText().toString());
int cursor = binding.keyword.getSelectionStart();
switch (resId) {
case R.drawable.ic_keyboard_space:
sb.insert(cursor, " ");
binding.keyword.setText(sb.toString());
binding.keyword.setSelection(cursor + 1);
break;
case R.drawable.ic_keyboard_left:
binding.keyword.setSelection(--cursor < 0 ? 0 : cursor);
break;
@ -59,6 +54,9 @@ public class CustomKeyboard implements KeyboardAdapter.OnClickListener {
binding.keyword.setText(sb.toString());
binding.keyword.setSelection(cursor - 1);
break;
case R.drawable.ic_keyboard_voice:
callback.onVoice();
break;
case R.drawable.ic_keyboard_remote:
callback.onRemote();
break;
@ -77,8 +75,10 @@ public class CustomKeyboard implements KeyboardAdapter.OnClickListener {
public interface Callback {
void onSearch();
void onVoice();
void onRemote();
void onSearch();
}
}

@ -2,6 +2,7 @@ package com.fongmi.android.tv.ui.custom;
import android.annotation.SuppressLint;
import androidx.leanback.widget.FocusHighlight;
import androidx.leanback.widget.HorizontalGridView;
import androidx.leanback.widget.ListRowPresenter;
import androidx.leanback.widget.RowPresenter;
@ -13,6 +14,11 @@ public class CustomRowPresenter extends ListRowPresenter {
private final int spacing;
public CustomRowPresenter(int spacing) {
this(spacing, FocusHighlight.ZOOM_FACTOR_MEDIUM);
}
public CustomRowPresenter(int spacing, int focusZoomFactor) {
super(focusZoomFactor);
this.spacing = spacing;
setShadowEnabled(false);
setSelectEffectEnabled(false);

@ -5,12 +5,12 @@ import android.view.LayoutInflater;
import android.view.WindowManager;
import androidx.appcompat.app.AlertDialog;
import androidx.recyclerview.widget.LinearLayoutManager;
import com.fongmi.android.tv.bean.Config;
import com.fongmi.android.tv.databinding.DialogHistoryBinding;
import com.fongmi.android.tv.impl.ConfigCallback;
import com.fongmi.android.tv.ui.adapter.ConfigAdapter;
import com.fongmi.android.tv.ui.custom.SpaceItemDecoration;
import com.fongmi.android.tv.utils.ResUtil;
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
@ -34,7 +34,8 @@ public class HistoryDialog implements ConfigAdapter.OnClickListener {
}
private void setRecyclerView() {
binding.recycler.setLayoutManager(new LinearLayoutManager(dialog.getContext()));
binding.recycler.setHasFixedSize(true);
binding.recycler.addItemDecoration(new SpaceItemDecoration(1, 16));
binding.recycler.setAdapter(adapter = new ConfigAdapter(this));
}

@ -1,10 +0,0 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:tint="@color/white"
android:viewportWidth="48"
android:viewportHeight="48">
<path
android:fillColor="@color/white"
android:pathData="M8,30V18H11V27H37V18H40V30Z" />
</vector>

@ -0,0 +1,10 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:tint="@color/white"
android:viewportWidth="48"
android:viewportHeight="48">
<path
android:fillColor="@color/white"
android:pathData="M24,26.85Q21.85,26.85 20.4,25.3Q18.95,23.75 18.95,21.55V9Q18.95,6.9 20.425,5.45Q21.9,4 24,4Q26.1,4 27.575,5.45Q29.05,6.9 29.05,9V21.55Q29.05,23.75 27.6,25.3Q26.15,26.85 24,26.85ZM24,15.45Q24,15.45 24,15.45Q24,15.45 24,15.45Q24,15.45 24,15.45Q24,15.45 24,15.45Q24,15.45 24,15.45Q24,15.45 24,15.45Q24,15.45 24,15.45Q24,15.45 24,15.45ZM22.5,42V35.2Q17.2,34.65 13.6,30.75Q10,26.85 10,21.55H13Q13,26.1 16.225,29.2Q19.45,32.3 24,32.3Q28.55,32.3 31.775,29.2Q35,26.1 35,21.55H38Q38,26.85 34.4,30.75Q30.8,34.65 25.5,35.2V42ZM24,23.85Q24.9,23.85 25.475,23.175Q26.05,22.5 26.05,21.55V9Q26.05,8.15 25.45,7.575Q24.85,7 24,7Q23.15,7 22.55,7.575Q21.95,8.15 21.95,9V21.55Q21.95,22.5 22.525,23.175Q23.1,23.85 24,23.85Z" />
</vector>

@ -1,10 +0,0 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:tint="@color/white"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="@color/white"
android:pathData="M12,14c1.66,0 2.99,-1.34 2.99,-3L15,5c0,-1.66 -1.34,-3 -3,-3S9,3.34 9,5v6c0,1.66 1.34,3 3,3zM17.3,11c0,3 -2.54,5.1 -5.3,5.1S6.7,14 6.7,11L5,11c0,3.41 2.72,6.23 6,6.72L11,21h2v-3.28c3.28,-0.48 6,-3.3 6,-6.72h-1.7z" />
</vector>

@ -4,70 +4,102 @@
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center|bottom"
android:keepScreenOn="true"
android:orientation="vertical">
android:orientation="horizontal"
android:padding="24dp">
<LinearLayout
android:id="@+id/bar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="16dp"
android:gravity="center_vertical"
android:orientation="horizontal">
<ImageView
android:id="@+id/voice"
android:layout_width="48dp"
android:layout_height="48dp"
android:layout_gravity="center"
android:layout_marginEnd="16dp"
android:background="@drawable/selector_mic"
android:focusable="true"
android:focusableInTouchMode="true"
android:scaleType="center"
android:src="@drawable/ic_voice" />
android:layout_height="match_parent"
android:layout_marginEnd="24dp"
android:orientation="vertical">
<com.fongmi.android.tv.ui.custom.CustomEditText
android:id="@+id/keyword"
android:layout_width="wrap_content"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:backgroundTint="@color/white"
android:layout_marginBottom="24dp"
android:background="@null"
android:hint="@string/search_keyword"
android:imeOptions="actionDone"
android:inputType="textCapCharacters|textAutoCorrect|textAutoComplete"
android:letterSpacing="0.02"
android:maxLength="50"
android:maxLength="20"
android:singleLine="true"
android:textColor="@color/white"
android:textColorHint="@color/white"
android:textCursorDrawable="@drawable/shape_cursor"
android:textSize="24sp" />
<FrameLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/keyboard"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layoutManager="androidx.recyclerview.widget.GridLayoutManager"
app:spanCount="6"
tools:itemCount="36"
tools:listitem="@layout/adapter_keyboard_text" />
<ImageView
android:id="@+id/voice"
android:layout_width="120dp"
android:layout_height="120dp"
android:src="@drawable/ic_keyboard_voice"
android:visibility="gone"
tools:visibility="visible" />
</FrameLayout>
</LinearLayout>
<com.fongmi.android.tv.ui.custom.CustomHorizontalGridView
android:id="@+id/word"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:clipChildren="false"
android:clipToPadding="false"
android:paddingStart="24dp"
android:paddingEnd="24dp"
app:focusOutEnd="true"
app:focusOutFront="true" />
<LinearLayout
android:layout_width="150dp"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="24dp"
android:text="@string/search_history"
android:textColor="@color/white"
android:textSize="24sp" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/keyboard"
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/history"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
tools:itemCount="10"
tools:listitem="@layout/adapter_word" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:clipChildren="false"
android:clipToPadding="false"
android:padding="24sp"
app:layoutManager="androidx.recyclerview.widget.GridLayoutManager"
app:spanCount="11"
tools:itemCount="44"
tools:listitem="@layout/adapter_keyboard_text" />
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
android:id="@+id/hint"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="24dp"
android:text="@string/search_hot"
android:textColor="@color/white"
android:textSize="24sp" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/word"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
tools:itemCount="10"
tools:listitem="@layout/adapter_word" />
</LinearLayout>
</LinearLayout>

@ -3,8 +3,7 @@
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:padding="8dp">
android:orientation="horizontal">
<TextView
android:id="@+id/text"

@ -2,7 +2,7 @@
<ImageView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/icon"
android:layout_width="match_parent"
android:layout_width="40dp"
android:layout_height="40dp"
android:background="@drawable/selector_keyboard"
android:focusable="true"

@ -2,7 +2,7 @@
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/text"
android:layout_width="match_parent"
android:layout_width="40dp"
android:layout_height="40dp"
android:background="@drawable/selector_keyboard"
android:focusable="true"

@ -1,8 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.recyclerview.widget.RecyclerView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/recycler"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:clipChildren="false"
android:clipToPadding="false"
android:padding="8dp" />
android:padding="16dp"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" />

@ -10,9 +10,10 @@
<string name="home_recommend">更新推荐</string>
<!-- Search -->
<string name="search_keyword">输入关键字…</string>
<string name="search_clear">清空</string>
<string name="search_remote">远程</string>
<string name="search_keyword">关键字…</string>
<string name="search_history">历史纪录</string>
<string name="search_suggest">建议搜索</string>
<string name="search_hot">热门搜索</string>
<!-- Collect -->
<string name="collect_result"><xliff:g name="name">%s</xliff:g>”的搜索结果</string>

@ -10,9 +10,10 @@
<string name="home_recommend">更新推薦</string>
<!-- Search -->
<string name="search_keyword">輸入關鍵字…</string>
<string name="search_clear">清除</string>
<string name="search_remote">遠端</string>
<string name="search_keyword">關鍵字…</string>
<string name="search_history">歷史紀錄</string>
<string name="search_suggest">建議搜尋</string>
<string name="search_hot">熱門搜尋</string>
<!-- Collect -->
<string name="collect_result"><xliff:g name="name">%s</xliff:g>」的搜尋結果</string>

@ -11,8 +11,9 @@
<!-- Search -->
<string name="search_keyword">Keywords…</string>
<string name="search_clear">Clear</string>
<string name="search_remote">Remote</string>
<string name="search_history">History</string>
<string name="search_suggest">Suggest</string>
<string name="search_hot">Hot</string>
<!-- Collect -->
<string name="collect_result">Search results for <xliff:g name="name">%s</xliff:g></string>

@ -47,6 +47,7 @@ public class ParseTask {
if (useParse) parse = ApiConfig.get().getParse();
else if (url.startsWith("json:")) parse = Parse.get(1, url.substring(5));
else if (url.startsWith("parse:")) parse = ApiConfig.get().getParse(url.substring(6));
else if (url.startsWith("magnet:")) parse = Parse.get(99, url);
if (parse == null) parse = Parse.get(0, url);
}
@ -64,6 +65,9 @@ public class ParseTask {
case 3: //聚合
jsonMix(webUrl, flag);
break;
case 99: //磁力
onParseError();
break;
}
}

Loading…
Cancel
Save