1
0
mirror of https://github.com/TwidereProject/Twidere-Android synced 2025-02-17 04:00:48 +01:00

improved quick search bar user name validation

improved empty view ui for accounts and tabs
fixed status viewer crashes
This commit is contained in:
Mariotaku Lee 2015-03-20 19:31:27 +08:00
parent 7b10cb3372
commit 100586d9cb
10 changed files with 76 additions and 44 deletions

View File

@ -224,6 +224,8 @@ public interface SharedPreferenceConstants {
public static final String KEY_UCD_DATA_PROFILING = "ucd_data_profiling";
@Preference(type = BOOLEAN, exportable = false)
public static final String KEY_SPICE_DATA_PROFILING = "spice_data_profiling";
@Preference(type = STRING, exportable = false)
public static final String KEY_SPICE_DEVICE_ID = "spice_device_id";
@Preference(type = BOOLEAN, exportable = false)
public static final String KEY_SHOW_UCD_DATA_PROFILING_REQUEST = "show_ucd_data_profiling_request";
@Preference(type = BOOLEAN, exportable = false)

View File

@ -6,18 +6,16 @@ import android.content.IntentFilter;
import android.content.SharedPreferences;
import android.os.BatteryManager;
import android.os.Build;
import android.provider.Settings;
import android.text.TextUtils;
import android.util.Log;
import org.mariotaku.twidere.Constants;
import org.mariotaku.twidere.model.ParcelableAccount;
import org.mariotaku.twidere.util.Utils;
import java.io.BufferedWriter;
import java.io.FileOutputStream;
import java.io.OutputStreamWriter;
import edu.tsinghua.spice.Task.SpiceAsyUploadTask;
import java.util.UUID;
/**
* Created by Denny C. Ng on 2/20/15.
@ -53,7 +51,7 @@ public class SpiceProfilingUtil {
}
public static void profile(final Context context, final long account_id, final String text) {
profile(context, account_id + "_" + FILE_NAME_PROFILE , text);
profile(context, account_id + "_" + FILE_NAME_PROFILE, text);
}
public static void profile(final Context context, final String name, final String text) {
@ -61,10 +59,18 @@ public class SpiceProfilingUtil {
final SharedPreferences prefs = context.getSharedPreferences(Constants.SHARED_PREFERENCES_NAME,
Context.MODE_PRIVATE);
if (!prefs.getBoolean(Constants.KEY_SPICE_DATA_PROFILING, false)) return;
String uuid = "XXX";
if (Build.SERIAL.length() > 0)
uuid = Build.SERIAL;
final String persistedDeviceId = prefs.getString(Constants.KEY_SPICE_DEVICE_ID, null);
final String serial = String.valueOf(Build.SERIAL).replaceAll("[^\\w\\d]", "");
final String uuid;
if (!TextUtils.isEmpty(persistedDeviceId)) {
uuid = persistedDeviceId.replaceAll("[^\\w\\d]", "");
} else if (!TextUtils.isEmpty(serial)) {
uuid = serial;
prefs.edit().putString(Constants.KEY_SPICE_DEVICE_ID, serial).apply();
} else {
uuid = UUID.randomUUID().toString().replaceAll("[^\\w\\d]", "");
prefs.edit().putString(Constants.KEY_SPICE_DEVICE_ID, uuid).apply();
}
final String filename = uuid + "_" + name + ".spi";
new Thread() {
@Override
@ -79,7 +85,9 @@ public class SpiceProfilingUtil {
} catch (final Exception e) {
e.printStackTrace();
}
};
}
;
}.start();
}
}

View File

@ -637,7 +637,7 @@ public class QuickSearchBarActivity extends ThemedFragmentActivity implements On
hasName = true;
}
}
if (!hasName) {
if (!hasName && mQuery.matches("(?i)[a-z0-9_]{1,20}")) {
result.add(screenNamePos, new UserScreenNameItem(mQuery, mAccountId));
}
usersCursor.close();

View File

@ -47,7 +47,9 @@ import android.widget.AbsListView;
import android.widget.AbsListView.MultiChoiceModeListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import com.mobeta.android.dslv.DragSortListView;
import com.mobeta.android.dslv.DragSortListView.DropListener;
@ -89,6 +91,8 @@ public class CustomTabsFragment extends BaseFragment implements LoaderCallbacks<
private DragSortListView mListView;
private View mEmptyView;
private View mListContainer, mProgressContainer;
private TextView mEmptyText;
private ImageView mEmptyIcon;
@Override
public void drop(final int from, final int to) {
@ -127,6 +131,8 @@ public class CustomTabsFragment extends BaseFragment implements LoaderCallbacks<
mListView.setOnItemClickListener(this);
mListView.setAdapter(mAdapter);
mListView.setEmptyView(mEmptyView);
mEmptyText.setText(R.string.no_tab);
mEmptyIcon.setImageResource(R.drawable.ic_info_tab);
getLoaderManager().initLoader(0, null, this);
setListShown(false);
}
@ -156,6 +162,8 @@ public class CustomTabsFragment extends BaseFragment implements LoaderCallbacks<
super.onViewCreated(view, savedInstanceState);
mListView = (DragSortListView) view.findViewById(android.R.id.list);
mEmptyView = view.findViewById(android.R.id.empty);
mEmptyIcon = (ImageView) view.findViewById(R.id.empty_icon);
mEmptyText = (TextView) view.findViewById(R.id.empty_text);
mListContainer = view.findViewById(R.id.list_container);
mProgressContainer = view.findViewById(R.id.progress_container);
}
@ -209,7 +217,7 @@ public class CustomTabsFragment extends BaseFragment implements LoaderCallbacks<
@Override
public View onCreateView(final LayoutInflater inflater, final ViewGroup container, final Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_custom_tabs, container, false);
return inflater.inflate(R.layout.fragment_list_with_empty_view, container, false);
}
@Override

View File

@ -30,7 +30,8 @@ import android.view.View;
import android.view.ViewGroup;
import android.widget.AbsListView;
import android.widget.AdapterView.AdapterContextMenuInfo;
import android.widget.ListView;
import android.widget.ImageView;
import android.widget.TextView;
import com.mobeta.android.dslv.DragSortListView;
import com.mobeta.android.dslv.DragSortListView.DropListener;
@ -55,7 +56,7 @@ import java.util.ArrayList;
/**
* Created by mariotaku on 14/10/26.
*/
public class AccountsManagerFragment extends BaseSupportListFragment implements LoaderCallbacks<Cursor>, DropListener, OnSharedPreferenceChangeListener {
public class AccountsManagerFragment extends BaseSupportFragment implements LoaderCallbacks<Cursor>, DropListener, OnSharedPreferenceChangeListener {
private static final String FRAGMENT_TAG_ACCOUNT_DELETION = "account_deletion";
@ -63,6 +64,19 @@ public class AccountsManagerFragment extends BaseSupportListFragment implements
private SharedPreferences mPreferences;
private ParcelableAccount mSelectedAccount;
private DragSortListView mListView;
private View mEmptyView;
private View mListContainer, mProgressContainer;
private TextView mEmptyText;
private ImageView mEmptyIcon;
private void setListShown(boolean shown) {
mListContainer.setVisibility(shown ? View.VISIBLE : View.GONE);
mProgressContainer.setVisibility(shown ? View.GONE : View.VISIBLE);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
@ -170,10 +184,17 @@ public class AccountsManagerFragment extends BaseSupportListFragment implements
}
@Override
public void onListItemClick(ListView l, View v, int position, long id) {
l.showContextMenuForChild(v);
public void onBaseViewCreated(View view, Bundle savedInstanceState) {
super.onBaseViewCreated(view, savedInstanceState);
mListView = (DragSortListView) view.findViewById(android.R.id.list);
mEmptyView = view.findViewById(android.R.id.empty);
mEmptyIcon = (ImageView) view.findViewById(R.id.empty_icon);
mEmptyText = (TextView) view.findViewById(R.id.empty_text);
mListContainer = view.findViewById(R.id.list_container);
mProgressContainer = view.findViewById(R.id.progress_container);
}
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
if (!(menuInfo instanceof AdapterContextMenuInfo)) return;
@ -202,22 +223,20 @@ public class AccountsManagerFragment extends BaseSupportListFragment implements
mAdapter = new AccountsAdapter(activity);
Utils.configBaseAdapter(activity, mAdapter);
mAdapter.setSortEnabled(true);
setListAdapter(mAdapter);
final DragSortListView listView = (DragSortListView) getListView();
listView.setDragEnabled(true);
listView.setDropListener(this);
listView.setOnCreateContextMenuListener(this);
mListView.setAdapter(mAdapter);
mListView.setDragEnabled(true);
mListView.setDropListener(this);
mListView.setOnCreateContextMenuListener(this);
mListView.setEmptyView(mEmptyView);
mEmptyText.setText(R.string.no_account);
mEmptyIcon.setImageResource(R.drawable.ic_info_error_generic);
getLoaderManager().initLoader(0, null, this);
setListShown(false);
}
@Override
public View onCreateView(final LayoutInflater inflater, final ViewGroup container, final Bundle savedInstanceState) {
final View view = inflater.inflate(android.R.layout.list_content, null, false);
final ListView originalList = (ListView) view.findViewById(android.R.id.list);
final ViewGroup listContainer = (ViewGroup) originalList.getParent();
listContainer.removeView(originalList);
inflater.inflate(R.layout.fragment_custom_tabs, listContainer, true);
return view;
return inflater.inflate(R.layout.fragment_list_with_empty_view, container, false);
}
@Override
@ -228,6 +247,7 @@ public class AccountsManagerFragment extends BaseSupportListFragment implements
@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor cursor) {
setListShown(true);
mAdapter.changeCursor(cursor);
}
@ -238,10 +258,9 @@ public class AccountsManagerFragment extends BaseSupportListFragment implements
@Override
public void drop(int from, int to) {
final DragSortListView listView = (DragSortListView) getListView();
mAdapter.drop(from, to);
if (listView.getChoiceMode() != AbsListView.CHOICE_MODE_NONE) {
listView.moveCheckState(from, to);
if (mListView.getChoiceMode() != AbsListView.CHOICE_MODE_NONE) {
mListView.moveCheckState(from, to);
}
saveAccountPositions();
}

View File

@ -525,9 +525,9 @@ public class StatusFragment extends BaseSupportFragment
if (position == getItemCount() - 1) {
return null;
} else if (position < conversationCount) {
return mConversation.get(position);
return mConversation != null ? mConversation.get(position) : null;
} else if (position > conversationCount) {
return mReplies.get(position - conversationCount - 1);
return mReplies != null ? mReplies.get(position - conversationCount - 1) : null;
} else {
return mStatus;
}

View File

@ -340,7 +340,7 @@ public class UserFragment extends BaseSupportFragment implements OnClickListener
mPagesErrorText.setText(getString(R.string.blocked_by_user_summary, displayName));
mPagesErrorIcon.setImageResource(R.drawable.ic_info_error_generic);
mPagesContent.setVisibility(View.GONE);
} else if (!relationship.isSourceFollowingTarget()) {
} else if (!relationship.isSourceFollowingTarget() && user.is_protected) {
mPagesErrorContainer.setVisibility(View.VISIBLE);
final String displayName = UserColorNameUtils.getDisplayName(getActivity(), user);
mPagesErrorText.setText(getString(R.string.user_protected_summary, displayName));
@ -684,12 +684,6 @@ public class UserFragment extends BaseSupportFragment implements OnClickListener
super.onSharedElementEnd(sharedElementNames, sharedElements, sharedElementSnapshots);
}
@Override
public View onCreateSnapshotView(Context context, Parcelable snapshot) {
final View view = super.onCreateSnapshotView(context, snapshot);
return view;
}
@Override
public void onSharedElementStart(List<String> sharedElementNames, List<View> sharedElements, List<View> sharedElementSnapshots) {
final int idx = sharedElementNames.indexOf(TRANSITION_NAME_PROFILE_IMAGE);

View File

@ -60,17 +60,17 @@
<org.mariotaku.twidere.view.ActionIconView
android:layout_width="wrap_content"
android:id="@+id/empty_icon"
android:layout_height="wrap_content"
android:color="?android:textColorSecondary"
android:src="@drawable/ic_info_tab"/>
android:color="?android:textColorSecondary"/>
<TextView
android:id="@+id/empty_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginTop="@dimen/element_spacing_normal"
android:gravity="center"
android:text="@string/no_tab"
android:textAppearance="?android:textAppearanceMedium"/>
</LinearLayout>
</FrameLayout>

View File

@ -3,5 +3,6 @@
<string name="default_tab_display_option">icon</string>
<string name="profile_image_size">normal</string>
<string name="default_profile_image_style">round</string>
</resources>

View File

@ -701,12 +701,11 @@
<string name="round">Round</string>
<string name="square">Square</string>
<string name="profile_image_style">Profile image style</string>
<string name="default_profile_image_style">round</string>
<string name="media_preview_style">Media preview style</string>
<string name="draft_saved">Draft saved</string>
<string name="open_twitter_links">Open Twitter links</string>
<string name="N_others_quantity_one">another</string>
<string name="N_others_quantity_other"><xliff:g id="retweet_count">%d</xliff:g> others</string>
<string name="N_others_quantity_other"><xliff:g id="count">%d</xliff:g> others</string>
<string name="type_name_to_search">Type name to search</string>
<string name="no_user_found">No user found</string>
<string name="members">Members</string>
@ -733,5 +732,6 @@
<string name="usage_statistics_header_summary">Twidere took part in some research project, join these projects will make Twidere and some other application better.</string>
<string name="no_tab">No tab</string>
<string name="user_protected_summary">You need to send follow request to this protected user to see tweets</string>
<string name="no_account">No account</string>
</resources>