Here are the examples of the java api android.widget.BaseAdapter taken from open source projects. By voting up you can indicate which examples are most useful and appropriate.
108 Examples
19
Source : HorizontalCarouselLayout.java
with Apache License 2.0
from zyyoona7
with Apache License 2.0
from zyyoona7
public void setAdapter(BaseAdapter adapter) {
if (adapter != null) {
this.mAdapter = adapter;
this.mCenterView = (this.mCurrenreplacedem = 0);
if (this.mHowManyViews % 2 == 0) {
this.mMaxChildUnderCenter = (this.mHowManyViews / 2);
} else {
this.mMaxChildUnderCenter = (this.mHowManyViews / 2);
}
for (int i = 0; i <= this.mMaxChildUnderCenter; i++) {
if (i > this.mAdapter.getCount() - 1) {
break;
}
View v = this.mAdapter.getView(i, null, this);
addView(v);
}
childrenLayout(0.0F);
invalidate();
}
}
19
Source : MusicListActivity.java
with GNU General Public License v3.0
from yanxiaonuo
with GNU General Public License v3.0
from yanxiaonuo
public clreplaced MusicListActivity extends SuperActivity {
private ListView musicListView;
BaseAdapter adapter = null;
/**
* 音乐列表LinkedList,存储每个音乐的文件地址
*/
private LinkedList<File> list;
/**
* 音乐列表listView的适配器
*/
private clreplaced MyAdapter extends BaseAdapter {
@Override
public int getCount() {
return list.size();
}
@Override
public Object gereplacedem(int i) {
return list.get(i);
}
@Override
public long gereplacedemId(int i) {
return i;
}
@Override
public View getView(int i, View view, ViewGroup viewGroup) {
View v;
// 复用
if (view == null) {
v = View.inflate(MusicListActivity.this, R.layout.item_musiclist_adapter, null);
} else {
v = view;
}
TextView songName = v.findViewById(R.id.item_musicList_songName);
TextView songer = v.findViewById(R.id.item_musicList_songer);
AVLoadingIndicatorView loadingView = v.findViewById(R.id.item_loadingView);
// 获取歌曲文件地址
File f = (File) gereplacedem(i);
// 设置歌曲名字
String name = f.getName();
songName.setText(name.substring(0, name.length() - 4));
// 获取当前的播放位置,使得歌曲列表中的loadingView显示出来,表示其正在播放
int currPlayingNum = Utils.getInt(MusicListActivity.this, Constant.PLAYINGNUM, 0);
if (currPlayingNum == i) {
loadingView.setVisibility(View.VISIBLE);
} else {
loadingView.setVisibility(View.GONE);
}
return v;
}
}
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_musiclist);
// 状态栏透明化
StatusBarUtil.setTransparent(MusicListActivity.this);
// 获取音乐列表listView
musicListView = findViewById(R.id.musicListActivity_musicListView);
// 检查是否有音乐列表
// 音乐列表LinkedList 是直接被持久化处理,现在获取看是否存在列表
list = Utils.getBeanFromSp(this, Constant.MUSICLISTKEY);
if (list != null) {
if (list.size() == 0) {
// 空
Toast.makeText(this, "未添加歌曲,点击右上方的搜索按钮可以进行搜索哦~", Toast.LENGTH_LONG).show();
} else {
// 设置适配器
adapter = new MyAdapter();
musicListView.setAdapter(adapter);
}
} else {
Toast.makeText(this, "未添加歌曲,点击右上方的搜索按钮可以进行搜索哦~", Toast.LENGTH_LONG).show();
}
musicListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
// 设置当前播放歌曲的位置
if (Utils.putInt(MusicListActivity.this, Constant.PLAYINGNUM, i)) {
// 进入播放页面
Intent intent = new Intent(MusicListActivity.this, PlayerActivity.clreplaced);
startActivity(intent);
finish();
overridePendingTransition(R.anim.next_in, R.anim.next_out);
}
}
});
}
/**
* 左上角的返回按钮
*
* @param view
*/
public void back(View view) {
MusicListActivity.this.finish();
overridePendingTransition(R.anim.pre_in, R.anim.pre_out);
}
/**
* 右上角搜索音乐按钮
*
* @param view
*/
public void SearchMusic(View view) {
// 开启搜索页面
Intent intent = new Intent(this, SearchMusicActivity.clreplaced);
startActivity(intent);
this.finish();
overridePendingTransition(R.anim.next_in, R.anim.next_out);
}
}
19
Source : EditSpinner.java
with Apache License 2.0
from xuexiangjys
with Apache License 2.0
from xuexiangjys
private void setBaseAdapter(BaseAdapter adapter) {
if (mPopupWindow == null) {
initPopupWindow();
}
mPopupWindow.setAdapter(adapter);
}
19
Source : ListPopup.java
with Apache License 2.0
from xuexiangjys
with Apache License 2.0
from xuexiangjys
/**
* 带条目的弹出框
*
* @author xuexiang
* @since 2019/1/14 下午10:02
*/
public clreplaced ListPopup extends BaseCustomPopup {
/**
* 适配器
*/
private BaseAdapter mAdapter;
private int mMaxHeight;
private AdapterView.OnItemClickListener mOnItemClickListener;
protected ListPopup(Context context) {
super(context);
}
@Override
protected void initAttributes() {
/**
* 集合
*/
ListView mListView = new XUIWrapContentListView(getContext(), mMaxHeight);
FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams(mWidth, mMaxHeight);
mListView.setLayoutParams(lp);
mListView.setAdapter(mAdapter);
mListView.setVerticalScrollBarEnabled(false);
mListView.setOnItemClickListener(mOnItemClickListener);
mListView.setDivider(ResUtils.getDrawable(R.drawable.xui_config_list_item_selector));
mListView.setDividerHeight(DensityUtils.dp2px(getContext(), 1));
setContentView(mListView);
}
@Override
protected void initViews(View view) {
}
public BaseAdapter getAdapter() {
return mAdapter;
}
public ListPopup setAdapter(BaseAdapter adapter) {
mAdapter = adapter;
return this;
}
public int getMaxHeight() {
return mMaxHeight;
}
public ListPopup setMaxHeight(int maxHeight) {
mMaxHeight = maxHeight;
return this;
}
public ListPopup setOnItemClickListener(AdapterView.OnItemClickListener onItemClickListener) {
mOnItemClickListener = onItemClickListener;
return this;
}
}
19
Source : ListPopup.java
with Apache License 2.0
from xuexiangjys
with Apache License 2.0
from xuexiangjys
public ListPopup setAdapter(BaseAdapter adapter) {
mAdapter = adapter;
return this;
}
19
Source : SyncJob.java
with GNU Lesser General Public License v3.0
from TheAkki
with GNU Lesser General Public License v3.0
from TheAkki
/**
* This clreplaced define and handle a synchronization job.
* @author theakki
* @since 0.1
*/
public clreplaced SyncJob extends AsyncTask<Context, Integer, Integer> {
private final static String L_TAG = SyncJob.clreplaced.getSimpleName();
// XML Tags
private final static String TAG_ROOT = "SyncJob";
private final static String TAG_SideA = "SideA";
private final static String TAG_SideB = "SideB";
private final static String TAG_Name = "Name";
private final static String ATTR_Type = "type";
private final static String TAG_Active = "Active";
private final static String TAG_SyncDirection = "SyncDir";
private final static String TAG_OneWayStrategy = "StrategyOneWay";
private final static String TAG_TwoWayStrategy = "StrategyTwoWay";
private final static String TAG_WhiteList = "IncludeList";
private final static String TAG_Blacklist = "ExcludeList";
private final static String TAG_Item = "Item";
private final static String TAG_Schedule = "Schedule";
private final static String ATTR_Schedule_Active = "Active";
private final static String ATTR_Schedule_Hour = "Hour";
private final static String ATTR_Schedule_Minute = "Minute";
public static final String DEFAULT_SETTINGS = "<" + TAG_ROOT + "/>";
// Attributees
private SchedulerInfo _Scheduling = new SchedulerInfo();
/**
* Constructor for creating from XML Node
* @param Node XML-Node
*/
public SyncJob(Element Node) {
loadJobSettings(Node);
}
/**
* Constructor
*/
public SyncJob() {
}
public void loadJobSettings(Element Node) {
final String name = Node.getNodeName();
if (name.compareToIgnoreCase(TAG_ROOT) != 0)
throw new IllegalArgumentException("Node name '" + name + "' not expected");
NodeList childs = Node.getChildNodes();
for (int i = 0; i < childs.getLength(); ++i) {
Element child = (Element) childs.item(i);
final String elementName = child.getNodeName();
if (elementName.compareToIgnoreCase(TAG_SideA) == 0) {
String type = child.getAttribute(ATTR_Type);
IConnection sideA = ConnectionFactory.create(type, (Element) child.getChildNodes().item(0));
if (sideA == null) {
final String strError = "Connection '" + type + "' not implemented";
Log.e(L_TAG, strError);
throw new IllegalArgumentException(strError);
}
_SideA = sideA;
} else if (elementName.compareToIgnoreCase(TAG_SideB) == 0) {
String type = child.getAttribute(ATTR_Type);
IConnection sideB = ConnectionFactory.create(type, (Element) child.getChildNodes().item(0));
if (sideB == null) {
final String strError = "Connection '" + type + "' not implemented";
Log.e(L_TAG, strError);
throw new IllegalArgumentException(strError);
}
_SideB = sideB;
} else if (elementName.compareToIgnoreCase(TAG_Name) == 0) {
_Name = child.getTextContent();
} else if (elementName.compareToIgnoreCase(TAG_Active) == 0) {
_isActive = Boolean.parseBoolean(child.getTextContent());
} else if (elementName.compareToIgnoreCase(TAG_Blacklist) == 0) {
insertInList(child, _ExcludeList, true);
} else if (elementName.compareToIgnoreCase(TAG_WhiteList) == 0) {
insertInList(child, _IncludeList, true);
} else if (elementName.compareToIgnoreCase(TAG_SyncDirection) == 0) {
_Direction = SettingsHelper.SyncDirectionFromString(child.getTextContent(), true, SyncDirection.Booth);
} else if (elementName.compareToIgnoreCase(TAG_OneWayStrategy) == 0) {
_SingleStrategy = SettingsHelper.OneWayStrategyFromString(child.getTextContent(), true, OneWayStrategy.Standard);
} else if (elementName.compareToIgnoreCase(TAG_TwoWayStrategy) == 0) {
_BoothStrategy = SettingsHelper.TwoWayStrategyFromString(child.getTextContent(), true, TwoWayStrategy.AWins);
} else if (elementName.compareToIgnoreCase(TAG_Schedule) == 0) {
final String Active = child.getAttribute(ATTR_Schedule_Active);
if (Active != null) {
_Scheduling.Active(Boolean.parseBoolean(Active));
}
final String hour = child.getAttribute(ATTR_Schedule_Hour);
if (hour != null) {
_Scheduling.Hour(Integer.parseInt(hour));
}
final String minute = child.getAttribute(ATTR_Schedule_Minute);
if (minute != null) {
_Scheduling.Minute(Integer.parseInt(minute));
}
}
}
}
protected void insertInList(Element parent, ArrayList<String> list, boolean clear) {
if (clear)
list.clear();
NodeList children = parent.getChildNodes();
for (int i = 0; i < children.getLength(); ++i) {
Element child = (Element) children.item(i);
final String nodeName = child.getTagName();
if (nodeName.compareToIgnoreCase(TAG_Item) != 0)
throw new IllegalArgumentException("Unexpected Nodename '" + nodeName + "'.");
/* It is necessary to trim this line. In other cases it's not so easy to match file properties */
final String trimmedLine = StringHelper.reduceSpaces(child.getTextContent());
list.add(trimmedLine);
}
}
public Element getJobSettings(Doreplacedent doc) {
Element root = doc.createElement(TAG_ROOT);
// Name
Element name = doc.createElement(TAG_Name);
name.setTextContent(_Name);
root.appendChild(name);
// Active
Element active = doc.createElement(TAG_Active);
active.setTextContent("" + _isActive);
root.appendChild(active);
// Path A
if (_SideA != null) {
Element sideARoot = doc.createElement(TAG_SideA);
sideARoot.setAttribute(ATTR_Type, _SideA.Type());
Element sideA = _SideA.getJobSettings(doc);
sideARoot.appendChild(sideA);
root.appendChild(sideARoot);
}
// Path B
if (_SideB != null) {
Element sideBRoot = doc.createElement(TAG_SideB);
sideBRoot.setAttribute(ATTR_Type, _SideB.Type());
Element sideB = _SideB.getJobSettings(doc);
sideBRoot.appendChild(sideB);
root.appendChild(sideBRoot);
}
// Sync Direction
Element syncDir = doc.createElement(TAG_SyncDirection);
syncDir.setTextContent(_Direction.toString());
root.appendChild(syncDir);
// One Way Sync Strategy
Element ows = doc.createElement(TAG_OneWayStrategy);
ows.setTextContent(_SingleStrategy.toString());
root.appendChild(ows);
// Two Way Sync Strategy
Element tws = doc.createElement(TAG_TwoWayStrategy);
tws.setTextContent(_BoothStrategy.toString());
root.appendChild(tws);
// WhiteList
Element wl = doc.createElement(TAG_WhiteList);
getTextListNodes(_IncludeList, doc, wl);
root.appendChild(wl);
// Blacklist
Element bl = doc.createElement(TAG_Blacklist);
getTextListNodes(_ExcludeList, doc, bl);
root.appendChild(bl);
// Schedule
Element schedule = doc.createElement(TAG_Schedule);
schedule.setAttribute(ATTR_Schedule_Active, Boolean.toString(_Scheduling.Active()));
schedule.setAttribute(ATTR_Schedule_Hour, Integer.toString(_Scheduling.Hour()));
schedule.setAttribute(ATTR_Schedule_Minute, Integer.toString(_Scheduling.Minute()));
root.appendChild(schedule);
return root;
}
protected void getTextListNodes(ArrayList<String> list, Doreplacedent doc, Element root) {
for (String strItem : list) {
Element item = doc.createElement(TAG_Item);
item.setTextContent(strItem);
root.appendChild(item);
}
}
public JobInfo getJobInfo() {
JobInfo result = new JobInfo();
result.Name = _Name;
result.IsActive = _isActive;
result.Status = _status;
result.ActiveElements = _actNumber;
result.MaxElements = _maxNumber;
return result;
}
/**
* Reset status from finished to not started
*/
public void resetStatusWhenFinished() {
if (_status == SyncStatus.FINISH) {
_status = SyncStatus.NOT_STARTED;
_actNumber = 0;
_maxNumber = 0;
sendUpdate();
}
}
private int _status = 0;
public int getProcess() {
return _status;
}
private int _actNumber = 0;
public int getActNumber() {
return _actNumber;
}
public int _maxNumber = 0;
public int getMaxNumber() {
return _maxNumber;
}
private BaseAdapter _adapter;
public void setAdapter(@Nullable BaseAdapter adapter) {
_adapter = adapter;
}
@Override
protected Integer doInBackground(Context... params) {
Context act = params[0];
Log.d(L_TAG, "Start background job for job '" + Name() + "'");
Do(act);
return 0;
}
@Override
protected void onProgressUpdate(Integer... params) {
_status = params[0];
_actNumber = params[1];
_maxNumber = params[2];
sendUpdate();
}
private void sendUpdate() {
if (_adapter != null)
_adapter.notifyDataSetChanged();
}
public static int getStatusText(int status) {
switch(status) {
case SyncStatus.NOT_STARTED:
return R.string.SyncStatus_NotStarted;
case SyncStatus.CONNECT_FILES_A:
return R.string.SyncStatus_ConnectA;
case SyncStatus.CONNECT_FILES_B:
return R.string.SyncStatus_ConnectB;
case SyncStatus.READ_FILES_A:
return R.string.SyncStatus_ReadFilesA;
case SyncStatus.READ_FILES_B:
return R.string.SyncStatus_ReadFilesB;
case SyncStatus.replacedYSE_FILES:
return R.string.SyncStatus_replacedyseFiles;
case SyncStatus.CREATE_JOB:
return R.string.SyncStatus_CreateJobs;
case SyncStatus.COPY_FILES:
return R.string.SyncStatus_CopyFiles;
case SyncStatus.FINISH:
return R.string.SyncStatus_Finish;
default:
{
final String strError = "No text for status '" + status + "' available";
Log.e(L_TAG, strError);
throw new IllegalStateException(strError);
}
}
}
@Override
protected void onPostExecute(Integer result) {
super.onPostExecute(result);
}
private int _iState, _iActFile, _iMaxFile;
private void updateProgress(int State, int actFile, int maxFile) {
_iActFile = actFile;
_iMaxFile = maxFile;
updateProgress(State);
}
private void updateProgress(int State) {
_iState = State;
publishProgress(_iState, _iActFile, _iMaxFile);
}
private void Do(Context context) throws IllegalStateException {
if (_SideA == null)
throw new IllegalStateException("Connection A is null");
if (_SideB == null)
throw new IllegalStateException("Connection B is null");
_SideA.RequestPermissions(context);
_SideB.RequestPermissions(context);
updateProgress(SyncStatus.CONNECT_FILES_A, 0, 0);
_SideA.Connect(context);
updateProgress(SyncStatus.CONNECT_FILES_B);
_SideB.Connect(context);
ArrayList<replacedyzeResult> whitelist = replacedyzeHelper.prepareList(_IncludeList);
ArrayList<replacedyzeResult> blacklist = replacedyzeHelper.prepareList(_ExcludeList);
updateProgress(SyncStatus.READ_FILES_A);
ArrayList<FileItem> FilesA = _SideA.getFileList();
ArrayList<FileItem> FilteredFilesA = replacedyzeHelper.filterFileList(FilesA, blacklist, whitelist);
updateProgress(SyncStatus.READ_FILES_B);
ArrayList<FileItem> FilesB = _SideB.getFileList();
ArrayList<FileItem> FilteredFilesB = replacedyzeHelper.filterFileList(FilesB, blacklist, whitelist);
updateProgress(SyncStatus.replacedYSE_FILES);
ArrayList<FileMergeResult> MergedFiles = FileItemHelper.mergeFileList(FilteredFilesA, FilteredFilesB, _Direction, _SingleStrategy);
updateProgress(SyncStatus.CREATE_JOB);
ArrayList<DoingList> JobList = ApplyStrategy(MergedFiles);
updateProgress(SyncStatus.COPY_FILES);
Apply(JobList, _SideA, _SideB);
_SideA.Disconnect();
_SideB.Disconnect();
updateProgress(SyncStatus.FINISH);
}
private void throwIllegalState(DoingList doing) {
final String strError = "Invalid combination " + "A:'" + doing.SideA.Type.toString() + "' and " + "B:'" + doing.SideB.Type.toString() + "'";
Log.e(L_TAG, strError);
throw new IllegalStateException(strError);
}
protected void Apply(ArrayList<DoingList> list, IConnection conSideA, IConnection conSideB) {
int success = 0;
int errors = 0;
for (DoingList job : list) {
boolean result = false;
switch(job.SideA.Type) {
case Nothing:
// Single-Side actions only
switch(job.SideB.Type) {
case Nothing:
throw new IllegalStateException("Side A + B are empty");
case Move:
result = conSideB.Move(FileItemHelper.concatPath(job.SideB.File.RelativePath, job.SideB.File.FileName), job.SideB.Param);
break;
case Delete:
result = conSideB.Delete(FileItemHelper.concatPath(job.SideB.File.RelativePath, job.SideB.File.FileName));
break;
default:
throwIllegalState(job);
}
break;
case Move:
switch(job.SideB.Type) {
case Nothing:
// Expected other side
break;
default:
throwIllegalState(job);
}
result = conSideA.Move(FileItemHelper.concatPath(job.SideA.File.RelativePath, job.SideA.File.FileName), job.SideA.Param);
break;
case Delete:
switch(job.SideB.Type) {
case Nothing:
// Expected other side
break;
default:
throwIllegalState(job);
}
result = conSideA.Delete(FileItemHelper.concatPath(job.SideA.File.RelativePath, job.SideA.File.FileName));
break;
case Read:
switch(job.SideB.Type) {
case Write:
result = Copy(job.SideA, job.SideB, conSideA, conSideB);
if (job.SideA.DeleteAfter) {
final String filename = FileItemHelper.concatPath(job.SideA.File.RelativePath, job.SideA.File.FileName);
boolean tempResult = conSideA.Delete(filename);
if (tempResult == false) {
Log.e(L_TAG, "Can't delete file '" + filename + "' on Connection A");
}
}
break;
default:
throwIllegalState(job);
}
// No Single-Side Action allowed
break;
case Write:
switch(job.SideB.Type) {
case Read:
result = Copy(job.SideB, job.SideA, conSideB, conSideA);
if (job.SideB.DeleteAfter) {
final String filename = FileItemHelper.concatPath(job.SideB.File.RelativePath, job.SideB.File.FileName);
boolean tempResult = conSideB.Delete(filename);
if (tempResult == false) {
Log.e(L_TAG, "Can't delete file '" + filename + "' on Connection B");
}
}
break;
default:
throwIllegalState(job);
}
// No Single-Side Action allowed
break;
default:
throw new IllegalStateException("Action '" + job.SideA.Type.toString() + "' not implemented");
}
if (result == false) {
// fail...
++errors;
} else {
++success;
}
updateProgress(SyncStatus.COPY_FILES, success + errors, list.size());
}
if (errors > 0)
Log.e(L_TAG, "Finished sync (" + _Name + ") with " + errors + " errors");
Log.d(L_TAG, "Finished sync (" + _Name + ")");
}
private boolean Copy(DoingSide Source, DoingSide Target, IConnection conSource, IConnection conTarget) {
boolean bSourceIsLocal = conSource.hasLocalSupport();
boolean bTargetIsLocal = conTarget.hasLocalSupport();
final String strFileSource = FileItemHelper.concatPath(Source.File.RelativePath, Source.File.FileName);
final String strFileTarget = FileItemHelper.concatPath(Target.File.RelativePath, Target.File.FileName);
if (bSourceIsLocal) {
final String strLocalSourceFile;
try {
strLocalSourceFile = conSource.getLocalFilename(strFileSource);
File source = new File(strLocalSourceFile);
conTarget.Write(source, Target.File);
return true;
} catch (IllegalAccessException e) {
// should be allowed
Log.e(L_TAG, "Can't get local filename for relative source file '" + strFileSource + "' for connection: " + conSource.Type());
// retry without shortcut
bSourceIsLocal = false;
}
} else if (bTargetIsLocal) {
final String strLocalTargetFile;
try {
strLocalTargetFile = conTarget.getLocalFilename(strFileTarget);
File target = new File(strLocalTargetFile);
conSource.Read(strFileSource, target);
return true;
} catch (IllegalAccessException e) {
// should be allowed
Log.e(L_TAG, "Can't get local filename for relative target file '" + strFileTarget + "' for connection: " + conTarget.Type());
// retry without shortcut
bTargetIsLocal = false;
}
}
if (bSourceIsLocal == false && bTargetIsLocal == false) {
try {
File tempFile = File.createTempFile("temporary", ".tmp");
conSource.Read(strFileSource, tempFile);
conTarget.Write(tempFile, Target.File);
tempFile.delete();
} catch (Exception e) {
Log.e(L_TAG, e.getStackTrace().toString());
e.printStackTrace();
return false;
}
}
return true;
}
protected ArrayList<DoingList> ApplyStrategy(ArrayList<FileMergeResult> MergedFiles) {
ArrayList<DoingList> result = new ArrayList<>();
String prefixPathA = "";
String prefixPathB = "";
switch(_SingleStrategy) {
case AllFilesInDateFolder:
/* fall through */
case NewFilesInDateFolder:
/* fall through */
case MoveFilesInDateFolder:
if (_Direction == SyncDirection.ToA) {
prefixPathA = FileItemHelper.concatPath("/", DateHelper.getDate());
} else if (_Direction == SyncDirection.ToB) {
prefixPathB = FileItemHelper.concatPath("/", DateHelper.getDate());
}
break;
}
final boolean bDeleteSource = (_SingleStrategy == OneWayStrategy.MoveFiles) || (_SingleStrategy == OneWayStrategy.MoveFilesInDateFolder);
for (int i = 0; i < MergedFiles.size(); ++i) {
FileMergeResult res = MergedFiles.get(i);
switch(res.State) {
case MatchExactly:
// Do nothing
break;
case DateChanged_ANewer:
if (_Direction == SyncDirection.ToB || _Direction == SyncDirection.Booth) {
DoingList temp = new DoingList();
temp.SideA.Type = JobType.Read;
temp.SideB.Type = JobType.Write;
temp.SideA.File = res.FileA.clone();
temp.SideA.File.RelativePath = prefixPathA + temp.SideA.File.RelativePath;
temp.SideB.File = res.FileA.clone();
temp.SideB.File.RelativePath = prefixPathB + temp.SideB.File.RelativePath;
result.add(temp);
}
break;
case DateChanged_BNewer:
if (_Direction == SyncDirection.ToA || _Direction == SyncDirection.Booth) {
DoingList temp = new DoingList();
temp.SideA.Type = JobType.Write;
temp.SideB.Type = JobType.Read;
temp.SideA.File = res.FileB.clone();
temp.SideA.File.RelativePath = prefixPathA + temp.SideA.File.RelativePath;
temp.SideB.File = res.FileB.clone();
temp.SideB.File.RelativePath = prefixPathB + temp.SideB.File.RelativePath;
result.add(temp);
}
break;
// fall through
case Renamed_A:
case Moved_A:
{
DoingList temp = new DoingList();
temp.SideA.Type = JobType.Move;
temp.SideA.File = res.FileA.clone();
temp.SideA.File.RelativePath = prefixPathA + res.FileA.RelativePath;
temp.SideA.File.Modified = res.FileB.Modified;
temp.SideA.Param = prefixPathA + res.FileB.RelativePath + res.FileB.FileName;
result.add(temp);
}
break;
// fall through
case Renamed_B:
case Moved_B:
{
DoingList temp = new DoingList();
temp.SideB.Type = JobType.Move;
temp.SideB.File = res.FileB.clone();
temp.SideB.File.RelativePath = prefixPathB + temp.SideB.File.RelativePath;
temp.SideB.File.Modified = res.FileA.Modified;
temp.SideB.Param = prefixPathB + res.FileA.RelativePath + res.FileA.FileName;
result.add(temp);
}
break;
case NewFile:
if (res.FileA == null) {
DoingList temp = new DoingList();
temp.SideB.Type = JobType.Read;
temp.SideB.File = res.FileB.clone();
temp.SideB.File.RelativePath = prefixPathB + temp.SideB.File.RelativePath;
temp.SideB.DeleteAfter = bDeleteSource;
temp.SideA.Type = JobType.Write;
temp.SideA.File = res.FileB.clone();
temp.SideA.File.RelativePath = prefixPathA + temp.SideA.File.RelativePath;
result.add(temp);
} else {
DoingList temp = new DoingList();
temp.SideA.Type = JobType.Read;
temp.SideA.File = res.FileA.clone();
temp.SideA.File.RelativePath = prefixPathA + temp.SideA.File.RelativePath;
temp.SideA.DeleteAfter = bDeleteSource;
temp.SideB.Type = JobType.Write;
temp.SideB.File = res.FileA.clone();
temp.SideB.File.RelativePath = prefixPathB + temp.SideB.File.RelativePath;
result.add(temp);
}
break;
}
}
return result;
}
// Sync Direction
// SyncDirection.ToB;
private SyncDirection _Direction = SyncDirection.Booth;
public SyncDirection Direction() {
return _Direction;
}
public void Direction(SyncDirection Dir) {
_Direction = Dir;
}
private OneWayStrategy _SingleStrategy = OneWayStrategy.Standard;
public OneWayStrategy StrategyOneWay() {
return _SingleStrategy;
}
public void StrategyOneWay(OneWayStrategy Strategy) {
_SingleStrategy = Strategy;
}
private TwoWayStrategy _BoothStrategy = TwoWayStrategy.BWins;
public TwoWayStrategy StrategyTwoWay() {
return _BoothStrategy;
}
public void StrategyTwoWay(TwoWayStrategy Strategy) {
_BoothStrategy = Strategy;
}
private boolean _isActive = true;
public boolean Active() {
return _isActive;
}
public void Active(boolean value) {
_isActive = value;
}
private ArrayList<String> _IncludeList = new ArrayList<>();
private ArrayList<String> _ExcludeList = new ArrayList<>();
private String _Name = "";
public String Name() {
return _Name;
}
public void Name(String Name) {
this._Name = Name;
}
private IConnection _SideA;
public void SideA(IConnection Con) {
_SideA = Con;
}
// evtl. clone
public IConnection SideA() {
return _SideA;
}
private IConnection _SideB;
public void SideB(IConnection Con) {
_SideB = Con;
}
// evtl. clone
public IConnection SideB() {
return _SideB;
}
/**
* Return the Scheduler information
* @return Scheduler information
*/
public SchedulerInfo Scheduler() {
return _Scheduling;
}
/**
* Set Scheduler information
* @param sinfo Scheduler information
*/
public void Scheduler(@NonNull SchedulerInfo sinfo) {
_Scheduling = sinfo;
}
public clreplaced SyncStatus {
public static final int NOT_STARTED = 0;
public static final int CONNECT_FILES_A = 1;
public static final int CONNECT_FILES_B = 2;
public static final int READ_FILES_A = 3;
public static final int READ_FILES_B = 4;
public static final int replacedYSE_FILES = 5;
public static final int CREATE_JOB = 6;
public static final int COPY_FILES = 7;
public static final int FINISH = 10;
}
}
19
Source : SyncJob.java
with GNU Lesser General Public License v3.0
from TheAkki
with GNU Lesser General Public License v3.0
from TheAkki
public void setAdapter(@Nullable BaseAdapter adapter) {
_adapter = adapter;
}
19
Source : EditEventFragment.java
with Apache License 2.0
from SoyaLeaf
with Apache License 2.0
from SoyaLeaf
public clreplaced EditEventFragment extends BaseFragment implements View.OnClickListener, Animator.AnimatorListener, DateSelectDialog.DateSelectCallback {
private static final String DATE = "DATE";
private static final String EVENT = "EVENT";
private EditText mEditText;
private InputMethodManager mManager;
private Day mDay;
private Event mEvent;
private Button mBtnDate;
private OnUpdateListener mOnUpdateListener;
private OnAddListener mOnAddListener;
private OnDeleteListener mOnDeleteListener;
private boolean isExiting;
private Spinner mSpinnerEventType;
public EditEventFragment() {
super(R.layout.fragment_add_event);
}
public static EditEventFragment newInstance(Day day, Event event) {
EditEventFragment fragment = new EditEventFragment();
Bundle args = new Bundle();
args.putSerializable(DATE, day);
args.putSerializable(EVENT, event);
fragment.setArguments(args);
return fragment;
}
@Override
protected void setupUI() {
findToolbar(R.id.toolbar).setNavigationOnClickListener(this);
findViewById(R.id.ib_done).setOnClickListener(this);
mEditText = findViewById(R.id.et);
mBtnDate = findViewById(R.id.btn_date);
mBtnDate.setOnClickListener(this);
if (mEvent != null) {
String replacedle = mEvent.getreplacedle();
mEditText.setText(mEvent.getDetail());
mBtnDate.setText(replacedle.substring(2));
} else {
String date = String.format(Locale.CHINA, "%s年%d月%d日", String.valueOf(mDay.getYear()), mDay.getMonth(), mDay.getDayOfMonth());
mBtnDate.setText(date.substring(2));
}
mEditText.requestFocus();
mSpinnerEventType = findViewById(R.id.spinner_event_type);
mSpinnerEventType.setAdapter(mAdapter);
int position = mEvent != null ? mEvent.getType() : Setting.default_event_type;
mSpinnerEventType.setSelection(position);
}
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) {
enter(view);
}
}
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
mManager = (InputMethodManager) mHostActivity.getSystemService(Context.INPUT_METHOD_SERVICE);
if (mManager != null) {
mManager.showSoftInput(mEditText, 0);
}
}
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (getArguments() != null) {
mDay = (Day) getArguments().getSerializable(DATE);
mEvent = (Event) getArguments().getSerializable(EVENT);
}
if (mDay == null && mEvent != null) {
String replacedle = mEvent.getreplacedle();
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy年MM月dd日", Locale.CHINA);
Date date = null;
try {
date = dateFormat.parse(replacedle);
} catch (ParseException e) {
e.printStackTrace();
}
mDay = new Day(date.getYear() + 1900, date.getMonth() + 1, date.getDate());
}
}
private void enter(View view) {
WindowManager windowManager = mHostActivity.getWindowManager();
if (windowManager != null) {
Display display = windowManager.getDefaultDisplay();
Point outSize = new Point();
display.getRealSize(outSize);
int height = outSize.y;
int width = outSize.x;
Animator anim = ViewAnimationUtils.createCircularReveal(view, width, height, 0, height);
anim.setDuration(500);
anim.setInterpolator(new AccelerateDecelerateInterpolator());
anim.addListener(this);
anim.start();
}
}
@Override
public void onClick(View v) {
switch(v.getId()) {
case R.id.btn_date:
DateSelectDialog dateSelectDialog = DateSelectDialog.newInstance(mDay.getYear(), mDay.getMonth(), mDay.getDayOfMonth());
dateSelectDialog.show(getChildFragmentManager(), "");
dateSelectDialog.setDateSelectCallback(this);
break;
case R.id.ib_done:
done();
break;
default:
String detail = mEditText.getText().toString();
if (isAddNewEvent()) {
if (!hasContent(detail)) {
removeSelf();
} else {
confirmExit();
}
} else {
if (mEvent.getDetail().equals(detail)) {
removeSelf();
} else {
if (hasContent(detail)) {
confirmExit();
} else {
confirmDeleteIfContentIsEmpty();
}
}
}
break;
}
}
private void confirmDeleteIfContentIsEmpty() {
new AlertDialog.Builder(mHostActivity).setMessage(R.string.confirm_delete).setPositiveButton(R.string.delete, (dialog, which) -> {
EventDao.getInstance(mHostActivity).delete(mEvent);
mOnDeleteListener.onDelete();
removeSelf();
}).setNegativeButton(R.string.do_not_delete, (dialog, which) -> removeSelf()).show();
}
private void confirmExit() {
new AlertDialog.Builder(mHostActivity).setMessage(R.string.whether_to_save).setPositiveButton(R.string.confirm, (dialog, which) -> done()).setNegativeButton(R.string.cancel, (dialog, which) -> removeSelf()).show();
}
private void done() {
String detail = mEditText.getText().toString();
EventDao eventDao = EventDao.getInstance(mHostActivity);
if (hasContent(detail)) {
String replacedle = 20 + mBtnDate.getText().toString();
if (isAddNewEvent()) {
addNewEvent(detail, replacedle, eventDao);
} else {
updateEvent(detail, replacedle, eventDao);
}
removeWithAnimationAndHideSoftInput();
} else {
if (!isAddNewEvent()) {
confirmDeleteIfContentIsEmpty();
}
}
}
private boolean isAddNewEvent() {
return mEvent == null;
}
private boolean hasContent(String detail) {
return detail != null && !detail.trim().isEmpty();
}
private void addNewEvent(String detail, String replacedle, EventDao eventDao) {
int position = mSpinnerEventType.getSelectedItemPosition();
Event event = new Event(replacedle, detail, position);
eventDao.add(event);
if (mOnAddListener != null) {
mOnAddListener.onAdd();
}
}
private void updateEvent(String detail, String replacedle, EventDao eventDao) {
int position = mSpinnerEventType.getSelectedItemPosition();
mEvent.setreplacedle(replacedle);
mEvent.setDetail(detail);
mEvent.setType(position);
eventDao.update(mEvent);
if (mOnUpdateListener != null) {
mOnUpdateListener.onUpdate();
}
}
private void removeWithAnimationAndHideSoftInput() {
mManager.hideSoftInputFromWindow(mEditText.getWindowToken(), 0);
if (!isExiting) {
isExiting = true;
removeWithAnimation();
}
}
private void removeWithAnimation() {
Display display = mHostActivity.getWindowManager().getDefaultDisplay();
Point outSize = new Point();
display.getRealSize(outSize);
int height = outSize.y;
int width = outSize.x;
Animator anim = ViewAnimationUtils.createCircularReveal(mContentView, width, 0, height, 0);
anim.setDuration(500);
anim.setInterpolator(new AccelerateDecelerateInterpolator());
anim.addListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
mContentView.setVisibility(View.GONE);
removeFragment(EditEventFragment.this);
}
});
anim.start();
}
private void removeSelf() {
isExiting = true;
mManager.hideSoftInputFromWindow(mEditText.getWindowToken(), 0);
removeFragment(this);
}
private void paste() {
ClipboardManager clipboardManager = (ClipboardManager) mHostActivity.getSystemService(Context.CLIPBOARD_SERVICE);
ClipData primaryClip = clipboardManager.getPrimaryClip();
final String message = primaryClip.gereplacedemAt(0).getText().toString();
if (primaryClip.gereplacedemCount() > 0) {
new AlertDialog.Builder(mHostActivity).setreplacedle("剪切板内容").setMessage(message).setPositiveButton("粘贴", (dialog, which) -> {
mEditText.append(message);
dialog.dismiss();
}).setNegativeButton("取消", (dialog, which) -> dialog.dismiss()).show();
} else {
new AlertDialog.Builder(mHostActivity).setMessage("剪切板里什么也没有 >_<").show();
}
}
private BaseAdapter mAdapter = new BaseAdapter() {
Symbol[] symbols = Symbol.values();
int[] resIds = { R.drawable.ic_rect_black_24dp, R.drawable.ic_circle_black_24dp, R.drawable.ic_triangle_black_24dp, R.drawable.ic_star_black_24dp, R.drawable.ic_favorite_black_24dp };
@Override
public int getCount() {
return symbols.length;
}
@Override
public Object gereplacedem(int position) {
return symbols[position];
}
@Override
public long gereplacedemId(int position) {
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
Symbol symbol = symbols[position];
if (convertView == null) {
convertView = LayoutInflater.from(mHostActivity).inflate(R.layout.spinner_item_symbol, null);
}
TextView textView = convertView.findViewById(R.id.tv);
ImageView imageView = convertView.findViewById(R.id.iv);
String comment = Setting.symbol_comment.get(symbol.KEY);
textView.setText(comment);
imageView.setImageResource(resIds[position]);
return convertView;
}
};
public void setOnUpdateListener(OnUpdateListener onUpdateListener) {
this.mOnUpdateListener = onUpdateListener;
}
public void setOnAddListener(OnAddListener onAddListener) {
this.mOnAddListener = onAddListener;
}
public void setOnDeleteListener(OnDeleteListener onDeleteListener) {
this.mOnDeleteListener = onDeleteListener;
}
@Override
public void onAnimationStart(Animator animation) {
}
@Override
public void onAnimationEnd(Animator animation) {
mManager = (InputMethodManager) mHostActivity.getSystemService(Context.INPUT_METHOD_SERVICE);
if (mManager != null) {
mManager.showSoftInput(mEditText, 0);
}
}
@Override
public void onAnimationCancel(Animator animation) {
}
@Override
public void onAnimationRepeat(Animator animation) {
}
@Override
public void onSelectCancel() {
}
@Override
public void onValueChange(int year, int month, int day) {
String date = String.format(Locale.CHINA, "%s年%d月%d日", String.valueOf(year), month, day);
mBtnDate.setText(date.substring(2));
}
@Override
public void onSelectConfirm(int year, int month, int day) {
}
@Override
public void onDismiss() {
mEditText.requestFocus();
mManager.showSoftInput(mEditText, 0);
}
public interface OnUpdateListener {
void onUpdate();
}
public interface OnAddListener {
void onAdd();
}
public interface OnDeleteListener {
void onDelete();
}
}
19
Source : OptionsActivity.java
with Apache License 2.0
from SmartisanTech
with Apache License 2.0
from SmartisanTech
/**
* Created by huangxin on 14-7-1.
*/
public clreplaced OptionsActivity extends Activity {
private static final String TAG = "OptionsActivity";
private ListView mOptionsList;
private BaseAdapter mAdapter;
private OptionsInfo mOptionsInfo;
private String[] mOptions;
private Object[] mValues;
private Object mCurrentValue;
private boolean mAutoFinishAfterSelect;
public static final String EXTRA_OPTION_INFO = "extra_option_info";
public static final String EXTRA_CURRENT_VALUE = "extra_current_value";
public static final String EXTRA_AUTO_FINISH = "extra_auto_finish";
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.options_layout);
replacedle replacedle = (replacedle) findViewById(R.id.view_replacedle);
setreplacedleByIntent(replacedle);
replacedle.setBackButtonListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
finish();
}
});
mOptionsList = (ListView) findViewById(R.id.options_list);
Intent intent = getIntent();
// auto finish default
mAutoFinishAfterSelect = intent.getBooleanExtra(EXTRA_AUTO_FINISH, true);
if (intent.hasExtra(EXTRA_OPTION_INFO)) {
mOptionsInfo = intent.getParcelableExtra(EXTRA_OPTION_INFO);
mCurrentValue = intent.getStringExtra(EXTRA_CURRENT_VALUE);
mOptions = mOptionsInfo.getOptionEntries();
mValues = mOptionsInfo.getOptionValues();
} else {
LogUtils.e(TAG, "has no option info, finish.");
finish();
return;
}
mOptionsList.addHeaderView(Utils.inflateListTransparentHeader(this));
mAdapter = new OptionsAdapter();
mOptionsList.setAdapter(mAdapter);
mOptionsList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int index, long l) {
index -= mOptionsList.getHeaderViewsCount();
if (index < 0)
return;
if (mOptionsInfo != null) {
if (mAutoFinishAfterSelect)
finish();
if (mOptionsInfo.save(OptionsActivity.this, index)) {
mCurrentValue = mValues[index].toString();
LogUtils.d(TAG, "onItemClick: current:" + mCurrentValue);
mAdapter.notifyDataSetChanged();
}
}
}
});
}
protected void setreplacedleByIntent(replacedle replacedle) {
if (getIntent().hasExtra(replacedle.EXTRA_replacedLE_TEXT)) {
String replacedleStr = getIntent().getStringExtra(replacedle.EXTRA_replacedLE_TEXT);
if (!TextUtils.isEmpty(replacedleStr)) {
replacedle.setreplacedle(replacedleStr);
}
}
}
@Override
public void finish() {
super.finish();
if (getIntent() != null) {
int[] anims = getIntent().getIntArrayExtra(IntentSmt.EXTRA_SMARTISAN_ANIM_RESOURCE_ID);
if (anims != null) {
overridePendingTransition(anims[0], anims[1]);
}
}
}
private clreplaced OptionsAdapter extends BaseAdapter {
LayoutInflater mInflater;
public OptionsAdapter() {
mInflater = LayoutInflater.from(OptionsActivity.this);
}
@Override
public int getCount() {
return mOptions.length;
}
@Override
public Object gereplacedem(int i) {
return mOptions[i];
}
@Override
public long gereplacedemId(int i) {
return i;
}
@Override
public View getView(int i, View convertView, ViewGroup viewGroup) {
ViewHolder holder;
if (convertView == null || !(convertView.getTag() instanceof ViewHolder)) {
holder = new ViewHolder();
convertView = mInflater.inflate(R.layout.option_item_layout, null);
holder.mOptionreplacedle = (TextView) convertView.findViewById(R.id.option_replacedle);
holder.mOptionCheckedImg = (ImageView) convertView.findViewById(R.id.option_checked);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
if (getCount() == 1) {
convertView.setBackgroundResource(R.drawable.selector_setting_sub_item_bg_single);
} else if (i == 0) {
convertView.setBackgroundResource(R.drawable.selector_setting_sub_item_bg_top);
} else if (i == getCount() - 1) {
convertView.setBackgroundResource(R.drawable.selector_setting_sub_item_bg_bottom);
} else {
convertView.setBackgroundResource(R.drawable.selector_setting_sub_item_bg_middle);
}
holder.mOptionreplacedle.setText(mOptions[i]);
holder.mOptionCheckedImg.setVisibility((mValues[i] == null && mCurrentValue == null) || mValues[i].toString().equals(mCurrentValue) ? View.VISIBLE : View.GONE);
return convertView;
}
}
static clreplaced ViewHolder {
TextView mOptionreplacedle;
ImageView mOptionCheckedImg;
}
}
19
Source : MainActivity.java
with Apache License 2.0
from RealMoMo
with Apache License 2.0
from RealMoMo
// 弹出对话框
private void showDialog(String replacedle, BaseAdapter adapter, DialogInterface.OnClickListener listener) {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setreplacedle(replacedle);
builder.setAdapter(adapter, listener);
builder.show();
}
19
Source : NavBean.java
with GNU General Public License v3.0
from qizhenghao
with GNU General Public License v3.0
from qizhenghao
/**
* Created by qizhenghao on 16/11/7.
*
* 导航栏bean信息
*/
public clreplaced NavBean {
public static int TYPE_CURRENT;
// 是否需要吸附
public static boolean IS_NEED_ATTACH = true;
@Retention(RetentionPolicy.SOURCE)
@IntDef({ TYPE_REPOST, TYPE_COMMENT, TYPE_LIKE })
public @interface TYPE {
}
public static final int TYPE_REPOST = 1;
public static final int TYPE_COMMENT = 2;
public static final int TYPE_LIKE = 3;
public NavBean(@TYPE int type, BaseAdapter adapter) {
this.type = type;
this.adapter = adapter;
switch(type) {
case TYPE_REPOST:
replacedle = "转发";
break;
case TYPE_COMMENT:
replacedle = "评论";
break;
case TYPE_LIKE:
replacedle = "赞";
break;
}
}
public BaseAdapter adapter;
public String replacedle;
// 展示的数据量
public int count;
// 参考TYPE
public int type;
// 是否可以加载更多
public boolean hasMore = false;
// 是否是刷新
public boolean isRefresh = true;
public int pageNo = 1;
public int pageSize = 10;
// 第一条可见的位置
private int firstVisibleItem;
// 距离顶部的位置
private int topDistance;
// 存储上一次的
public static int topDistanceUniversal;
// 存储上一次的
public static int firstVisibleItemUniversal;
public int getFirstVisibleItem() {
return firstVisibleItem;
}
public int getTopDistance() {
return topDistance;
}
public void setTopDistance(int topDistance) {
this.topDistance = topDistance;
topDistanceUniversal = topDistance;
}
public void setFirstVisibleItem(int firstVisibleItem) {
this.firstVisibleItem = firstVisibleItem;
firstVisibleItemUniversal = firstVisibleItem;
}
}
19
Source : RedPointActivity.java
with Apache License 2.0
from pop1234o
with Apache License 2.0
from pop1234o
public clreplaced RedPointActivity extends Activity implements View.OnTouchListener {
private BaseAdapter adapter1 = new BaseAdapter() {
@Override
public int getCount() {
return 10;
}
@Override
public Object gereplacedem(int position) {
return null;
}
@Override
public long gereplacedemId(int position) {
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = LayoutInflater.from(RedPointActivity.this).inflate(R.layout.item_list, null);
}
View viewById = convertView.findViewById(R.id.view);
viewById.setOnTouchListener(RedPointActivity.this);
return convertView;
}
};
private View inflate;
private PointView pointview;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_red_point);
ListView listview = (ListView) findViewById(R.id.listview);
listview.setAdapter(adapter1);
}
@Override
public boolean onTouch(final View v, MotionEvent event) {
switch(event.getAction()) {
case MotionEvent.ACTION_DOWN:
ViewParent parent = v.getParent();
if (parent == null) {
return false;
}
parent.requestDisallowInterceptTouchEvent(true);
inflate = LayoutInflater.from(this).inflate(R.layout.layout_drag, null);
pointview = (PointView) inflate.findViewById(R.id.pointview);
PointLayout pointlayout = (PointLayout) inflate.findViewById(R.id.pointlayout);
pointlayout.setOnRemoveListenter(new PointLayout.OnRemoveListenter() {
@Override
public void onRemove() {
v.setVisibility(View.GONE);
}
@Override
public void onRestore() {
v.setVisibility(View.VISIBLE);
}
});
pointview.setView(v);
ViewGroup viewGroup = (ViewGroup) v.getRootView();
viewGroup.addView(inflate);
v.setVisibility(View.INVISIBLE);
break;
case MotionEvent.ACTION_UP:
break;
case MotionEvent.ACTION_MOVE:
break;
}
pointview.onTouchEvent(event);
return true;
}
}
19
Source : CustomAlertDialog.java
with MIT License
from netease-im
with MIT License
from netease-im
public void setAdapter(final BaseAdapter adapter, final OnClickListener listener) {
listAdapter = adapter;
listListener = listener;
itemListener = new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
dismiss();
listListener.onClick(CustomAlertDialog.this, position);
}
};
}
19
Source : JecListPreference.java
with GNU General Public License v3.0
from MrIkso
with GNU General Public License v3.0
from MrIkso
/**
* @author Jecelyin Peng <[email protected]>
*/
public clreplaced JecListPreference extends ListPreference {
private BaseAdapter adapter;
public JecListPreference(Context context, AttributeSet attrs) {
super(context, attrs);
}
public JecListPreference(Context context) {
super(context);
}
public void setAdapter(BaseAdapter adapter) {
this.adapter = adapter;
}
}
19
Source : JecListPreference.java
with GNU General Public License v3.0
from MrIkso
with GNU General Public License v3.0
from MrIkso
public void setAdapter(BaseAdapter adapter) {
this.adapter = adapter;
}
19
Source : PanelListAdapter.java
with Apache License 2.0
from huashengzzz
with Apache License 2.0
from huashengzzz
/**
* 设置纵向表头的适配器
*
* @param columnAdapter adapter of column ListView
*/
public void setColumnAdapter(BaseAdapter columnAdapter) {
this.columnAdapter = columnAdapter;
}
19
Source : FriendRefreshView.java
with MIT License
from GitLqr
with MIT License
from GitLqr
public void setAdapter(BaseAdapter adapter) {
if (mContentView != null) {
mContentView.setAdapter(adapter);
}
}
19
Source : LazyThumbnailLoader.java
with GNU General Public License v3.0
from ericberman
with GNU General Public License v3.0
from ericberman
public clreplaced LazyThumbnailLoader implements Runnable, ImageCacheCompleted {
private final ThumbnailedItem[] m_rgItems;
private final BaseAdapter m_li;
public interface ThumbnailedItem {
MFBImageInfo getDefaultImage();
}
public LazyThumbnailLoader(ThumbnailedItem[] rgItems, BaseAdapter li) {
m_rgItems = rgItems;
m_li = li;
}
private void getNextThumb() {
if (m_rgItems == null)
return;
for (ThumbnailedItem ti : m_rgItems) {
if (ti == null)
continue;
MFBImageInfo mfbii = ti.getDefaultImage();
if (mfbii != null) {
Bitmap b = mfbii.bitmapFromThumb();
if (b == null) {
mfbii.LoadImageAsync(true, this);
return;
}
}
}
}
public void run() {
getNextThumb();
}
public void imgCompleted(MFBImageInfo sender) {
m_li.notifyDataSetChanged();
getNextThumb();
}
}
19
Source : LinearLayoutForListView.java
with Apache License 2.0
from djzhao627
with Apache License 2.0
from djzhao627
/**
* Created by djzhao on 17/05/02.
*/
public clreplaced LinearLayoutForListView extends LinearLayout {
private BaseAdapter adapter;
private OnClickListener onClickListener = null;
public LinearLayoutForListView(Context context) {
super(context);
}
public void bindLinearLayout() {
int count = adapter.getCount();
this.removeAllViews();
for (int i = 0; i < count; i++) {
View v = adapter.getView(i, null, null);
v.setOnClickListener(this.onClickListener);
addView(v, i);
}
Log.v("countTAG", "" + count);
}
public void setAdapter(BaseAdapter adapter) {
this.adapter = adapter;
}
}
19
Source : LinearLayoutForListView.java
with Apache License 2.0
from devallever
with Apache License 2.0
from devallever
/**
* Created by XM on 2016/4/19.
*/
public clreplaced LinearLayoutForListView extends LinearLayout {
private BaseAdapter adapter;
private View.OnClickListener onClickListener = null;
public void bindLinearLayout() {
int count = adapter.getCount();
this.removeAllViews();
for (int i = 0; i < count; i++) {
View v = adapter.getView(i, null, null);
v.setOnClickListener(this.onClickListener);
addView(v, i);
}
Log.v("countTAG", "" + count);
}
public LinearLayoutForListView(Context context) {
super(context);
}
}
19
Source : BannerPageView.java
with Apache License 2.0
from chengkun123
with Apache License 2.0
from chengkun123
public void setAdapter(BaseAdapter adapter) {
setAdapter(new BannerPagerAdapter());
mAdapter = adapter;
// 监听Activity生命周期
mActivity.getApplication().registerActivityLifecycleCallbacks(mActivityCallbacks);
}
19
Source : ChooseSavegameDialog.java
with GNU General Public License v3.0
from cgeo
with GNU General Public License v3.0
from cgeo
public clreplaced ChooseSavegameDialog extends CustomDialogFragment {
private static final String SAVE_FILE = "SAVE_FILE";
private static final String TAG = "ChooseSavegameDialog";
private File saveFile;
private ArrayList<DataInfo> data;
private BaseAdapter adapter;
public ChooseSavegameDialog() {
super();
}
public static ChooseSavegameDialog newInstance(File saveFile) {
ChooseSavegameDialog savegameDialog = new ChooseSavegameDialog();
Bundle bundle = new Bundle();
bundle.putString(SAVE_FILE, saveFile.getAbsolutePath());
savegameDialog.setArguments(bundle);
return savegameDialog;
}
private boolean restoreInstance(Bundle bundle) {
if (bundle == null) {
return false;
}
String saveFileName = bundle.getString(SAVE_FILE);
if (saveFileName == null) {
return false;
}
saveFile = new File(saveFileName);
return true;
}
@Override
public Dialog createDialog(Bundle savedInstanceState) {
if (A.getMain() == null) {
return null;
}
if (!(restoreInstance(savedInstanceState) || restoreInstance(getArguments()))) {
return null;
}
// prepare list
data = new ArrayList<>();
data.add(new DataInfo(getString(R.string.save_file_new), ""));
File file;
if ((file = saveFile).exists()) {
data.add(new DataInfo(getString(R.string.save_file_main), UtilsFormat.formatDatetime(file.lastModified()), file));
}
if ((file = new File(saveFile.getAbsolutePath() + ".bak")).exists()) {
data.add(new DataInfo(getString(R.string.save_file_backup), UtilsFormat.formatDatetime(file.lastModified()), file));
}
for (int slot = 1; slot <= Preferences.GLOBAL_SAVEGAME_SLOTS; ++slot) {
if ((file = new File(saveFile.getAbsolutePath() + "." + slot)).exists()) {
data.add(new DataInfo(String.format("%s %d", getString(R.string.save_game_slot), slot), UtilsFormat.formatDatetime(file.lastModified()), file));
}
}
// create listView
ListView listView = UtilsGUI.createListView(getActivity(), false, data);
// set click listener
listView.setOnItemClickListener((parent, view, position, id) -> itemClicked(position));
// set on long click listener for file deletion
listView.setOnItemLongClickListener((parent, view, position, id) -> {
itemLongClicked(position);
return true;
});
adapter = (BaseAdapter) listView.getAdapter();
// construct dialog
return new AlertDialog.Builder(getActivity()).setreplacedle(R.string.load_game).setIcon(R.drawable.ic_replacedle_logo).setView(listView).setNeutralButton(R.string.close, null).create();
}
private void itemClicked(int position) {
if (position == 0) {
MainActivity.wui.showScreen(WUI.SCREEN_CART_DETAIL, null);
dismiss();
return;
}
try {
FileSystem.copyFile((File) data.remove(position).addData01, saveFile);
MainActivity.startSelectedCartridge(true);
dismiss();
} catch (IOException e) {
e.printStackTrace();
}
}
private void itemLongClicked(final int position) {
if (position == 0)
return;
UtilsGUI.showDialogQuestion(getActivity(), R.string.delete_save_game, (dialog, btn) -> {
((File) data.remove(position).addData01).delete();
if (adapter != null)
adapter.notifyDataSetChanged();
}, null);
}
public void setParams(File saveFile) {
this.saveFile = saveFile;
}
}
19
Source : InfiniteCardView.java
with Apache License 2.0
from BakerJQ
with Apache License 2.0
from BakerJQ
/**
* @author BakerJ
* https://github.com/BakerJQ/InfiniteCards
*/
public clreplaced InfiniteCardView extends ViewGroup {
/*
* Three types of animation
* ANIM_TYPE_FRONT:custom animation for chosen card, common animation for other cards
* ANIM_TYPE_SWITCH:switch the position by custom animation of the first card and the chosen card
* ANIM_TYPE_FRONT_TO_LAST:moving the first card to last position by custom animation, common animation for others
*/
public static final int ANIM_TYPE_FRONT = 0, ANIM_TYPE_SWITCH = 1, ANIM_TYPE_FRONT_TO_LAST = 2;
// cardHeight / cardWidth = CARD_SIZE_RATIO
private static final float CARD_SIZE_RATIO = 0.5f;
// cardHeight / cardWidth = mCardRatio
private float mCardRatio = CARD_SIZE_RATIO;
// animation helper
private CardAnimationHelper mAnimationHelper;
// view adapter
private BaseAdapter mAdapter;
private int mCardWidth, mCardHeight;
public InfiniteCardView(@NonNull Context context) {
this(context, null);
}
public InfiniteCardView(@NonNull Context context, @Nullable AttributeSet attrs) {
this(context, attrs, 0);
}
public InfiniteCardView(@NonNull Context context, @Nullable AttributeSet attrs, @AttrRes int defStyleAttr) {
super(context, attrs, defStyleAttr);
init(context, attrs);
setClickable(true);
}
private void init(Context context, AttributeSet attrs) {
int animType = ANIM_TYPE_FRONT;
int animDuration = CardAnimationHelper.ANIM_DURATION;
int animAddRemoveDuration = CardAnimationHelper.ANIM_ADD_REMOVE_DURATION;
int animAddRemoveDelay = CardAnimationHelper.ANIM_ADD_REMOVE_DELAY;
if (attrs != null) {
TypedArray ta = context.obtainStyledAttributes(attrs, R.styleable.InfiniteCardView);
animType = ta.getInt(R.styleable.InfiniteCardView_animType, ANIM_TYPE_FRONT);
mCardRatio = ta.getFloat(R.styleable.InfiniteCardView_cardRatio, CARD_SIZE_RATIO);
animDuration = ta.getInt(R.styleable.InfiniteCardView_animDuration, CardAnimationHelper.ANIM_DURATION);
animAddRemoveDuration = ta.getInt(R.styleable.InfiniteCardView_animAddRemoveDuration, CardAnimationHelper.ANIM_ADD_REMOVE_DURATION);
animAddRemoveDelay = ta.getInt(R.styleable.InfiniteCardView_animAddRemoveDelay, CardAnimationHelper.ANIM_ADD_REMOVE_DELAY);
ta.recycle();
}
mAnimationHelper = new CardAnimationHelper(animType, animDuration, this);
mAnimationHelper.setAnimAddRemoveDuration(animAddRemoveDuration);
mAnimationHelper.setAnimAddRemoveDelay(animAddRemoveDelay);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int widthMode = MeasureSpec.getMode(widthMeasureSpec);
int heightMode = MeasureSpec.getMode(heightMeasureSpec);
int sizeWidth = MeasureSpec.getSize(widthMeasureSpec);
int sizeHeight = MeasureSpec.getSize(heightMeasureSpec);
measureChildren(widthMeasureSpec, heightMeasureSpec);
if (widthMode != MeasureSpec.EXACTLY || heightMode != MeasureSpec.EXACTLY) {
int childCount = getChildCount();
int childWidth = 0, childHeight = 0;
for (int i = 0; i < childCount; i++) {
View childView = getChildAt(i);
childWidth = Math.max(childView.getMeasuredWidth(), childWidth);
childHeight = Math.max(childView.getMeasuredHeight(), childHeight);
}
setMeasuredDimension((widthMode == MeasureSpec.EXACTLY) ? sizeWidth : childWidth, (heightMode == MeasureSpec.EXACTLY) ? sizeHeight : childHeight);
} else {
setMeasuredDimension(sizeWidth, sizeHeight);
}
if (mCardWidth == 0 || mCardHeight == 0) {
setCardSize(true);
}
}
private void setCardSize(boolean resetAdapter) {
mCardWidth = getMeasuredWidth();
mCardHeight = (int) (mCardWidth * mCardRatio);
mAnimationHelper.setCardSize(mCardWidth, mCardHeight);
mAnimationHelper.initAdapterView(mAdapter, resetAdapter);
}
@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
int childCount = getChildCount();
int childWidth, childHeight;
int childLeft, childTop, childRight, childBottom;
int width = getWidth(), height = getHeight();
for (int i = 0; i < childCount; i++) {
View childView = getChildAt(i);
childWidth = childView.getMeasuredWidth();
childHeight = childView.getMeasuredHeight();
childLeft = (width - childWidth) / 2;
childTop = (height - childHeight) / 2;
childRight = childLeft + childWidth;
childBottom = childTop + childHeight;
childView.layout(childLeft, childTop, childRight, childBottom);
}
}
void addCardView(CardItem card) {
addView(getCardView(card));
}
void addCardView(CardItem card, int position) {
addView(getCardView(card), position);
}
private View getCardView(final CardItem card) {
View view = card.view;
ViewGroup.LayoutParams layoutParams = new ViewGroup.LayoutParams(mCardWidth, mCardHeight);
view.setLayoutParams(layoutParams);
view.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
bringCardToFront(card);
}
});
return view;
}
private void bringCardToFront(CardItem card) {
if (!isClickable()) {
return;
}
mAnimationHelper.bringCardToFront(card);
}
/**
* bring the specific position card to front
*
* @param position position
*/
public void bringCardToFront(int position) {
mAnimationHelper.bringCardToFront(position);
}
/**
* set view adapter
*
* @param adapter adapter
*/
public void setAdapter(BaseAdapter adapter) {
this.mAdapter = adapter;
mAdapter.registerDataSetObserver(new DataSetObserver() {
@Override
public void onChanged() {
mAnimationHelper.notifyDataSetChanged(mAdapter);
}
});
mAnimationHelper.initAdapterView(adapter, true);
}
public void setTransformerToFront(AnimationTransformer toFrontTransformer) {
mAnimationHelper.setTransformerToFront(toFrontTransformer);
}
public void setTransformerToBack(AnimationTransformer toBackTransformer) {
mAnimationHelper.setTransformerToBack(toBackTransformer);
}
public void setCommonSwitchTransformer(AnimationTransformer commonTransformer) {
mAnimationHelper.setCommonSwitchTransformer(commonTransformer);
}
public void setTransformerCommon(AnimationTransformer transformerCommon) {
mAnimationHelper.setTransformerCommon(transformerCommon);
}
public void setZIndexTransformerToFront(ZIndexTransformer zIndexTransformerToFront) {
mAnimationHelper.setZIndexTransformerToFront(zIndexTransformerToFront);
}
public void setZIndexTransformerToBack(ZIndexTransformer zIndexTransformerToBack) {
mAnimationHelper.setZIndexTransformerToBack(zIndexTransformerToBack);
}
public void setZIndexTransformerCommon(ZIndexTransformer zIndexTransformerCommon) {
mAnimationHelper.setZIndexTransformerCommon(zIndexTransformerCommon);
}
public void setAnimInterpolator(Interpolator animInterpolator) {
mAnimationHelper.setAnimInterpolator(animInterpolator);
}
public void setAnimType(int animType) {
mAnimationHelper.setAnimType(animType);
}
public void setTransformerAnimAdd(AnimationTransformer transformerAnimAdd) {
mAnimationHelper.setTransformerAnimAdd(transformerAnimAdd);
}
public void setTransformerAnimRemove(AnimationTransformer transformerAnimRemove) {
mAnimationHelper.setTransformerAnimRemove(transformerAnimRemove);
}
public void setAnimAddRemoveInterpolator(Interpolator animAddRemoveInterpolator) {
mAnimationHelper.setAnimAddRemoveInterpolator(animAddRemoveInterpolator);
}
public void setCardSizeRatio(float cardSizeRatio) {
this.mCardRatio = cardSizeRatio;
setCardSize(false);
}
public boolean isAnimating() {
return mAnimationHelper.isAnimating();
}
public void setCardAnimationListener(CardAnimationListener cardAnimationListener) {
mAnimationHelper.setCardAnimationListener(cardAnimationListener);
}
public static interface CardAnimationListener {
void onAnimationStart();
void onAnimationEnd();
}
}
19
Source : CardAnimationHelper.java
with Apache License 2.0
from BakerJQ
with Apache License 2.0
from BakerJQ
/**
* @author BakerJ
*/
clreplaced CardAnimationHelper implements Animator.AnimatorListener, ValueAnimator.AnimatorUpdateListener {
// animation duration
static final int ANIM_DURATION = 1000, ANIM_ADD_REMOVE_DELAY = 200, ANIM_ADD_REMOVE_DURATION = 500;
// animation type
private int mAnimType = InfiniteCardView.ANIM_TYPE_FRONT;
// animation duration
private int mAnimDuration = ANIM_DURATION, mAnimAddRemoveDelay = ANIM_ADD_REMOVE_DELAY, mAnimAddRemoveDuration = ANIM_ADD_REMOVE_DURATION;
// card container view
private InfiniteCardView mCardView;
// card item list
private LinkedList<CardItem> mCards;
// total card count
private int mCardCount;
// card width, card height
// for judge Z index
// private ArrayList<CardItem> mCards4JudgeZIndex;
// current card moving to back, current card moving to front
private CardItem mCardToBack, mCardToFront;
// current card position moving to front, current card position moving to front
private int mPositionToBack = 0, mPositionToFront = 0;
private int mCardWidth, mCardHeight;
// is doing animation now
private boolean mIsAnim = false, mIsAddRemoveAnim = false;
// animator
private ValueAnimator mValueAnimator;
// custom animation transformer for card moving to front, card moving to back, and common card
private AnimationTransformer mTransformerToFront, mTransformerToBack, mTransformerCommon;
// custom animation transformer for card add and remove
private AnimationTransformer mTransformerAnimAdd, mTransformerAnimRemove;
// custom Z index transformer for card moving to front, card moving to back, and common card
private ZIndexTransformer mZIndexTransformerToFront, mZIndexTransformerToBack, mZIndexTransformerCommon;
// animation interpolator
private Interpolator mAnimInterpolator, mAnimAddRemoveInterpolator;
// view adapter needs to be notify while animation
private BaseAdapter mTempAdapter;
// current animation fraction
private float mCurrentFraction = 1;
// animation listener
private InfiniteCardView.CardAnimationListener mCardAnimationListener;
CardAnimationHelper(int mAnimType, int mAnimDuration, InfiniteCardView infiniteCardView) {
this.mAnimType = mAnimType;
this.mAnimDuration = mAnimDuration;
this.mCardView = infiniteCardView;
initTransformer();
initAnimator();
}
private void initTransformer() {
mAnimInterpolator = new LinearInterpolator();
mAnimAddRemoveInterpolator = new LinearInterpolator();
mTransformerToFront = new DefaultTransformerToFront();
mTransformerToBack = new DefaultTransformerToBack();
mTransformerCommon = new DefaultCommonTransformer();
mTransformerAnimAdd = new DefaultTransformerAdd();
mTransformerAnimRemove = new DefaultTransformerRemove();
mZIndexTransformerToFront = new DefaultZIndexTransformerToFront();
mZIndexTransformerToBack = new DefaultZIndexTransformerCommon();
mZIndexTransformerCommon = new DefaultZIndexTransformerCommon();
}
/**
* setup animator
*/
private void initAnimator() {
mValueAnimator = ValueAnimator.ofFloat(0, 1).setDuration(mAnimDuration);
mValueAnimator.addUpdateListener(this);
mValueAnimator.addListener(this);
}
/**
* do animation while update
*
* @param animation animation
*/
@Override
public void onAnimationUpdate(ValueAnimator animation) {
mCurrentFraction = (float) animation.getAnimatedValue();
float fractionInterpolated = mCurrentFraction;
if (mAnimInterpolator != null) {
fractionInterpolated = mAnimInterpolator.getInterpolation(mCurrentFraction);
}
doAnimationBackToFront(mCurrentFraction, fractionInterpolated);
doAnimationFrontToBack(mCurrentFraction, fractionInterpolated);
doAnimationCommon(mCurrentFraction, fractionInterpolated);
bringToFrontByZIndex();
}
/**
* do animation for card moving from back to front
*
* @param fraction animation progress from 0.0f to 1.0f
* @param fractionInterpolated interpolated animation progress
*/
private void doAnimationBackToFront(float fraction, float fractionInterpolated) {
mTransformerToFront.transformAnimation(mCardToFront.view, fraction, mCardWidth, mCardHeight, mPositionToFront, 0);
if (mAnimInterpolator != null) {
mTransformerToFront.transformInterpolatedAnimation(mCardToFront.view, fractionInterpolated, mCardWidth, mCardHeight, mPositionToFront, 0);
}
doAnimationZIndex(mZIndexTransformerToFront, mCardToFront, fraction, fractionInterpolated, mPositionToFront, 0);
}
/**
* do animation for card moving from from to back
*
* @param fraction animation progress from 0.0f to 1.0f
* @param fractionInterpolated interpolated animation progress
*/
private void doAnimationFrontToBack(float fraction, float fractionInterpolated) {
if (mAnimType == InfiniteCardView.ANIM_TYPE_FRONT) {
return;
}
mTransformerToBack.transformAnimation(mCardToBack.view, fraction, mCardWidth, mCardHeight, 0, mPositionToBack);
if (mAnimInterpolator != null) {
mTransformerToBack.transformInterpolatedAnimation(mCardToBack.view, fractionInterpolated, mCardWidth, mCardHeight, 0, mPositionToBack);
}
doAnimationZIndex(mZIndexTransformerToBack, mCardToBack, fraction, fractionInterpolated, 0, mPositionToBack);
}
/**
* do animation for common card items
*
* @param fraction animation progress from 0.0f to 1.0f
* @param fractionInterpolated interpolated animation progress
*/
private void doAnimationCommon(float fraction, float fractionInterpolated) {
if (mAnimType == InfiniteCardView.ANIM_TYPE_FRONT) {
for (int i = 0; i < mPositionToFront; i++) {
CardItem card = mCards.get(i);
doAnimationCommonView(card.view, fraction, fractionInterpolated, i, i + 1);
doAnimationZIndex(mZIndexTransformerCommon, card, fraction, fractionInterpolated, i, i + 1);
}
} else if (mAnimType == InfiniteCardView.ANIM_TYPE_FRONT_TO_LAST) {
for (int i = mPositionToFront + 1; i < mCardCount; i++) {
CardItem card = mCards.get(i);
doAnimationCommonView(card.view, fraction, fractionInterpolated, i, i - 1);
doAnimationZIndex(mZIndexTransformerCommon, card, fraction, fractionInterpolated, i, i - 1);
}
}
}
/**
* do animation for common card views
*
* @param view card view
* @param fraction animation progress from 0.0f to 1.0f
* @param fractionInterpolated interpolated animation progress
* @param fromPosition card moving from
* @param toPosition card moving to
*/
private void doAnimationCommonView(View view, float fraction, float fractionInterpolated, int fromPosition, int toPosition) {
mTransformerCommon.transformAnimation(view, fraction, mCardWidth, mCardHeight, fromPosition, toPosition);
if (mAnimInterpolator != null) {
mTransformerCommon.transformInterpolatedAnimation(view, fractionInterpolated, mCardWidth, mCardHeight, fromPosition, toPosition);
}
}
/**
* do calculation for card Z index
*
* @param transformer Z index transformer
* @param card card item
* @param fraction animation progress from 0.0f to 1.0f
* @param fractionInterpolated interpolated animation progress
* @param fromPosition card moving from
* @param toPosition card moving to
*/
private void doAnimationZIndex(ZIndexTransformer transformer, CardItem card, float fraction, float fractionInterpolated, int fromPosition, int toPosition) {
transformer.transformAnimation(card, fraction, mCardWidth, mCardHeight, fromPosition, toPosition);
if (mAnimInterpolator != null) {
transformer.transformInterpolatedAnimation(card, fractionInterpolated, mCardWidth, mCardHeight, fromPosition, toPosition);
}
}
/**
* bring card to front by Z index, the card with smaller Z index is in front of the card with
* bigger Z index
*/
private void bringToFrontByZIndex() {
if (mAnimType == InfiniteCardView.ANIM_TYPE_FRONT) {
// if the animation type is ANIM_TYPE_FRONT, which means other cards are under common
// animation, so start cycling the card items from the position before the moving
// card, and while the moving card's Z index is smaller than an other card, we
// call bringToFront for it, otherwise we call bringToFront for other cards
for (int i = mPositionToFront - 1; i >= 0; i--) {
CardItem card = mCards.get(i);
if (card.zIndex > mCardToFront.zIndex) {
mCardToFront.view.bringToFront();
mCardView.updateViewLayout(mCardToFront.view, mCardToFront.view.getLayoutParams());
} else {
card.view.bringToFront();
mCardView.updateViewLayout(card.view, card.view.getLayoutParams());
}
}
} else {
// sort the card items by Z index and call bringToFront foreach view
// Collections.sort(mCards4JudgeZIndex, this);
// for (int i = mCardCount - 1; i >= 0; i--) {
// mCards4JudgeZIndex.get(i).view.bringToFront();
// }
// ##########################for better performance#########################
// is card moving to front called bringToFront
boolean cardToFrontBrought = false;
// cycling the card items
for (int i = mCardCount - 1; i > 0; i--) {
CardItem card = mCards.get(i);
// get the card before current card
CardItem cardPre = i > 1 ? mCards.get(i - 1) : null;
// is card moving to back behind the card before current card
boolean cardToBackBehindCardPre = cardPre == null || mCardToBack.zIndex > cardPre.zIndex;
// if the card moving to back Z index is smaller than current card, and is behind
// the card before current card, we should call bringToFront for it
boolean bringCardToBackViewToFront = mCardToBack.zIndex < card.zIndex && cardToBackBehindCardPre;
// is card moving to front behind the current card
boolean cardToFrontBehindCardPre = cardPre == null || mCardToFront.zIndex > cardPre.zIndex;
// if the card moving to front Z index is smaller than current card, and is behind
// the card before current card, we should call bringToFront for it
boolean bringCardToFrontViewToFront = mCardToFront.zIndex < card.zIndex && cardToFrontBehindCardPre;
// if current card is not the card moving to front
if (i != mPositionToFront) {
// call bringToFront for it
card.view.bringToFront();
mCardView.updateViewLayout(card.view, card.view.getLayoutParams());
// if we should bring the card moving to back to front, just do it
if (bringCardToBackViewToFront) {
mCardToBack.view.bringToFront();
mCardView.updateViewLayout(mCardToBack.view, mCardToBack.view.getLayoutParams());
}
// if we should bring the card moving to front to front, just do it
if (bringCardToFrontViewToFront) {
mCardToFront.view.bringToFront();
mCardView.updateViewLayout(mCardToFront.view, mCardToFront.view.getLayoutParams());
cardToFrontBrought = true;
}
// if we has both bring the card moving to front and back to front, and the
// card moving to back Z index is smaller than the card moving to front Z
// index, we call bringToFront for the card moving to back
if (bringCardToBackViewToFront && bringCardToFrontViewToFront && mCardToBack.zIndex < mCardToFront.zIndex) {
mCardToBack.view.bringToFront();
mCardView.updateViewLayout(mCardToBack.view, mCardToBack.view.getLayoutParams());
}
} else {
// if current card is the card moving to front, and behind the card before
if (cardToFrontBehindCardPre) {
mCardToFront.view.bringToFront();
mCardView.updateViewLayout(mCardToFront.view, mCardToFront.view.getLayoutParams());
cardToFrontBrought = true;
// if the card moving to back Z index is smaller than the card moving to
// front, call bringToFront for it
if (cardToBackBehindCardPre && mCardToBack.zIndex < mCardToFront.zIndex) {
mCardToBack.view.bringToFront();
mCardView.updateViewLayout(mCardToBack.view, mCardToBack.view.getLayoutParams());
}
}
}
}
// it the card moving to front has not call bringToFront yet, which means it is
// already in the first position, call bringToFront for it
if (!cardToFrontBrought) {
mCardToFront.view.bringToFront();
mCardView.updateViewLayout(mCardToFront.view, mCardToFront.view.getLayoutParams());
}
}
}
@Override
public void onAnimationStart(Animator animation) {
mCurrentFraction = 0;
if (mCardAnimationListener != null) {
mCardAnimationListener.onAnimationStart();
}
}
/**
* animation end
*
* @param animation animation
*/
@Override
public void onAnimationEnd(Animator animation) {
if (mAnimType == InfiniteCardView.ANIM_TYPE_FRONT) {
// move the card moving to front to the first position
mCards.remove(mPositionToFront);
mCards.addFirst(mCardToFront);
} else if (mAnimType == InfiniteCardView.ANIM_TYPE_SWITCH) {
// switch the position of the card moving to front and back
mCards.remove(mPositionToFront);
mCards.removeFirst();
mCards.addFirst(mCardToFront);
mCards.add(mPositionToFront, mCardToBack);
} else {
// moving the first position card to last
mCards.remove(mPositionToFront);
mCards.removeFirst();
mCards.addFirst(mCardToFront);
mCards.addLast(mCardToBack);
}
mPositionToFront = 0;
mPositionToBack = 0;
mCurrentFraction = 1;
mIsAnim = false;
if (mTempAdapter != null) {
notifyDataSetChanged(mTempAdapter);
}
if (mCardAnimationListener != null) {
mCardAnimationListener.onAnimationEnd();
}
}
@Override
public void onAnimationCancel(Animator animation) {
}
@Override
public void onAnimationRepeat(Animator animation) {
}
/**
* init adapter view
*
* @param adapter adapter
*/
void initAdapterView(BaseAdapter adapter, boolean reset) {
if (mCardWidth > 0 && mCardHeight > 0) {
if (mCards == null) {
mCardView.removeAllViews();
firstSetAdapter(adapter);
} else if (reset || mCards.size() != adapter.getCount()) {
resetAdapter(adapter);
} else {
notifySetAdapter(adapter);
}
}
}
/**
* reset adapter view
*
* @param adapter adapter
*/
private void resetAdapter(BaseAdapter adapter) {
if (mTransformerAnimRemove == null) {
mCardView.removeAllViews();
firstSetAdapter(adapter);
} else {
mIsAddRemoveAnim = true;
for (int i = 0; i < mCardCount; i++) {
CardItem cardItem = mCards.get(i);
showAnimRemove(cardItem.view, mAnimAddRemoveDelay * i, i, i == mCardCount - 1, adapter);
}
}
}
private void showAnimRemove(final View view, int delay, final int position, final boolean isLast, final BaseAdapter adapter) {
final ValueAnimator valueAnimator = ValueAnimator.ofFloat(0, 1).setDuration(mAnimAddRemoveDuration);
valueAnimator.setStartDelay(delay);
valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
float fraction = (float) animation.getAnimatedValue();
mTransformerAnimRemove.transformAnimation(view, fraction, mCardWidth, mCardHeight, position, position);
if (mAnimAddRemoveInterpolator != null) {
mTransformerAnimRemove.transformInterpolatedAnimation(view, mAnimAddRemoveInterpolator.getInterpolation(fraction), mCardWidth, mCardHeight, position, position);
}
}
});
valueAnimator.addListener(new Animator.AnimatorListener() {
@Override
public void onAnimationStart(Animator animation) {
}
@Override
public void onAnimationEnd(Animator animation) {
view.setVisibility(View.GONE);
if (isLast) {
mIsAddRemoveAnim = false;
mCardView.removeAllViews();
if (mTempAdapter != null) {
notifyDataSetChanged(mTempAdapter);
} else {
firstSetAdapter(adapter);
}
}
}
@Override
public void onAnimationCancel(Animator animation) {
}
@Override
public void onAnimationRepeat(Animator animation) {
}
});
mCardView.post(new Runnable() {
@Override
public void run() {
valueAnimator.start();
}
});
}
/**
* first time set an adapter
*
* @param adapter adapter
*/
private void firstSetAdapter(BaseAdapter adapter) {
if (mTransformerAnimAdd != null) {
mIsAddRemoveAnim = true;
}
mCards = new LinkedList<>();
// mCards4JudgeZIndex = new ArrayList<>();
mCardCount = adapter.getCount();
for (int i = mCardCount - 1; i >= 0; i--) {
View child = adapter.getView(i, null, mCardView);
CardItem cardItem = new CardItem(child, 0, i);
mCardView.addCardView(cardItem);
mZIndexTransformerCommon.transformAnimation(cardItem, mCurrentFraction, mCardWidth, mCardHeight, i, i);
mTransformerCommon.transformAnimation(child, mCurrentFraction, mCardWidth, mCardHeight, i, i);
mCards.addFirst(cardItem);
// mCards4JudgeZIndex.add(cardItem);
child.setVisibility(View.INVISIBLE);
showAnimAdd(child, i * mAnimAddRemoveDelay, i, i == mCardCount - 1);
}
}
private void showAnimAdd(final View view, int delay, final int position, final boolean isLast) {
if (mTransformerAnimAdd == null) {
return;
}
final ValueAnimator valueAnimator = ValueAnimator.ofFloat(0, 1).setDuration(mAnimAddRemoveDuration);
valueAnimator.setStartDelay(delay);
valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
float fraction = (float) animation.getAnimatedValue();
mTransformerAnimAdd.transformAnimation(view, fraction, mCardWidth, mCardHeight, position, position);
if (mAnimAddRemoveInterpolator != null) {
mTransformerAnimAdd.transformInterpolatedAnimation(view, mAnimAddRemoveInterpolator.getInterpolation(fraction), mCardWidth, mCardHeight, position, position);
}
}
});
valueAnimator.addListener(new Animator.AnimatorListener() {
@Override
public void onAnimationStart(Animator animation) {
view.setVisibility(View.VISIBLE);
}
@Override
public void onAnimationEnd(Animator animation) {
if (isLast) {
mIsAddRemoveAnim = false;
if (mTempAdapter != null) {
notifyDataSetChanged(mTempAdapter);
}
}
}
@Override
public void onAnimationCancel(Animator animation) {
}
@Override
public void onAnimationRepeat(Animator animation) {
}
});
mCardView.post(new Runnable() {
@Override
public void run() {
valueAnimator.start();
}
});
}
/**
* notify
*
* @param adapter adapter
*/
private void notifySetAdapter(BaseAdapter adapter) {
mCardCount = adapter.getCount();
for (int i = 0; i < mCardCount; i++) {
CardItem cardItem = mCards.get(i);
View child = adapter.getView(cardItem.adapterIndex, cardItem.view, mCardView);
if (child != cardItem.view) {
if (cardItem.view != null) {
mCardView.removeView(cardItem.view);
}
cardItem.view = child;
mCardView.addCardView(cardItem, i);
mZIndexTransformerCommon.transformAnimation(cardItem, mCurrentFraction, mCardWidth, mCardHeight, i, i);
mTransformerCommon.transformAnimation(child, mCurrentFraction, mCardWidth, mCardHeight, i, i);
}
}
for (int i = mCardCount - 1; i >= 0; i--) {
mCards.get(i).view.bringToFront();
mCardView.updateViewLayout(mCards.get(i).view, mCards.get(i).view.getLayoutParams());
}
}
void notifyDataSetChanged(BaseAdapter adapter) {
if (mIsAnim || mIsAddRemoveAnim) {
mTempAdapter = adapter;
} else {
mTempAdapter = null;
initAdapterView(adapter, false);
}
}
void bringCardToFront(CardItem card) {
if (mCards == null || mTransformerCommon == null || mTransformerToFront == null || mTransformerToBack == null) {
return;
}
int position = mCards.indexOf(card);
bringCardToFront(position);
}
/**
* bring the specific position card to front
*
* @param position position
*/
void bringCardToFront(int position) {
if (position >= 0 && position != mPositionToFront && !mIsAnim && !mIsAddRemoveAnim) {
mPositionToFront = position;
// if the animation type is not ANIM_TYPE_SWITCH, the card to back post is the last
// position
mPositionToBack = mAnimType == InfiniteCardView.ANIM_TYPE_SWITCH ? mPositionToFront : (mCardCount - 1);
mCardToBack = mCards.getFirst();
mCardToFront = mCards.get(mPositionToFront);
if (mValueAnimator.isRunning()) {
mValueAnimator.end();
}
mIsAnim = true;
mValueAnimator.start();
}
}
// @Override
// public int compare(CardItem o1, CardItem o2) {
// return o1.zIndex < o2.zIndex ? -1 : 1;
// }
void setCardSize(int cardWidth, int cardHeight) {
this.mCardWidth = cardWidth;
this.mCardHeight = cardHeight;
}
void setTransformerToFront(AnimationTransformer toFrontTransformer) {
if (mIsAnim || mIsAddRemoveAnim) {
return;
}
this.mTransformerToFront = toFrontTransformer;
}
void setTransformerToBack(AnimationTransformer toBackTransformer) {
if (mIsAnim || mIsAddRemoveAnim) {
return;
}
this.mTransformerToBack = toBackTransformer;
}
void setCommonSwitchTransformer(AnimationTransformer commonTransformer) {
if (mIsAnim || mIsAddRemoveAnim) {
return;
}
this.mTransformerCommon = commonTransformer;
}
void setTransformerCommon(AnimationTransformer transformerCommon) {
if (mIsAnim || mIsAddRemoveAnim) {
return;
}
this.mTransformerCommon = transformerCommon;
}
void setZIndexTransformerToFront(ZIndexTransformer zIndexTransformerToFront) {
if (mIsAnim || mIsAddRemoveAnim) {
return;
}
this.mZIndexTransformerToFront = zIndexTransformerToFront;
}
void setZIndexTransformerToBack(ZIndexTransformer zIndexTransformerToBack) {
if (mIsAnim || mIsAddRemoveAnim) {
return;
}
this.mZIndexTransformerToBack = zIndexTransformerToBack;
}
void setZIndexTransformerCommon(ZIndexTransformer zIndexTransformerCommon) {
if (mIsAnim || mIsAddRemoveAnim) {
return;
}
this.mZIndexTransformerCommon = zIndexTransformerCommon;
}
void setAnimInterpolator(Interpolator animInterpolator) {
if (mIsAnim || mIsAddRemoveAnim) {
return;
}
this.mAnimInterpolator = animInterpolator;
}
void setAnimType(int animType) {
if (mIsAnim || mIsAddRemoveAnim) {
return;
}
this.mAnimType = animType;
}
void setTransformerAnimAdd(AnimationTransformer transformerAnimAdd) {
if (mIsAnim || mIsAddRemoveAnim) {
return;
}
this.mTransformerAnimAdd = transformerAnimAdd;
}
void setTransformerAnimRemove(AnimationTransformer transformerAnimRemove) {
if (mIsAnim || mIsAddRemoveAnim) {
return;
}
this.mTransformerAnimRemove = transformerAnimRemove;
}
void setAnimAddRemoveInterpolator(Interpolator animAddRemoveInterpolator) {
if (mIsAnim || mIsAddRemoveAnim) {
return;
}
this.mAnimAddRemoveInterpolator = animAddRemoveInterpolator;
}
void setAnimAddRemoveDelay(int animAddRemoveDelay) {
if (mIsAnim || mIsAddRemoveAnim) {
return;
}
this.mAnimAddRemoveDelay = animAddRemoveDelay;
}
void setAnimAddRemoveDuration(int animAddRemoveDuration) {
if (mIsAnim || mIsAddRemoveAnim) {
return;
}
this.mAnimAddRemoveDuration = animAddRemoveDuration;
}
boolean isAnimating() {
return mIsAnim || mIsAddRemoveAnim;
}
void setCardAnimationListener(InfiniteCardView.CardAnimationListener cardAnimationListener) {
this.mCardAnimationListener = cardAnimationListener;
}
}
19
Source : CardAnimationHelper.java
with Apache License 2.0
from BakerJQ
with Apache License 2.0
from BakerJQ
void notifyDataSetChanged(BaseAdapter adapter) {
if (mIsAnim || mIsAddRemoveAnim) {
mTempAdapter = adapter;
} else {
mTempAdapter = null;
initAdapterView(adapter, false);
}
}
19
Source : CardAnimationHelper.java
with Apache License 2.0
from BakerJQ
with Apache License 2.0
from BakerJQ
/**
* init adapter view
*
* @param adapter adapter
*/
void initAdapterView(BaseAdapter adapter, boolean reset) {
if (mCardWidth > 0 && mCardHeight > 0) {
if (mCards == null) {
mCardView.removeAllViews();
firstSetAdapter(adapter);
} else if (reset || mCards.size() != adapter.getCount()) {
resetAdapter(adapter);
} else {
notifySetAdapter(adapter);
}
}
}
19
Source : MainActivity.java
with Apache License 2.0
from BakerJQ
with Apache License 2.0
from BakerJQ
public clreplaced MainActivity extends AppCompatActivity {
private InfiniteCardView mCardView;
private BaseAdapter mAdapter1, mAdapter2;
private int[] resId = { R.mipmap.pic1, R.mipmap.pic2, R.mipmap.pic3, R.mipmap.pic4, R.mipmap.pic5 };
private boolean mIsAdapter1 = true;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mCardView = findViewById(R.id.view);
mAdapter1 = new MyAdapter(resId);
mAdapter2 = new MyAdapter(resId);
mCardView.setAdapter(mAdapter1);
mCardView.setCardAnimationListener(new InfiniteCardView.CardAnimationListener() {
@Override
public void onAnimationStart() {
Toast.makeText(MainActivity.this, "Animation Start", Toast.LENGTH_SHORT).show();
}
@Override
public void onAnimationEnd() {
Toast.makeText(MainActivity.this, "Animation End", Toast.LENGTH_SHORT).show();
}
});
initButton();
}
private void initButton() {
findViewById(R.id.pre).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (mIsAdapter1) {
setStyle2();
mCardView.bringCardToFront(mAdapter1.getCount() - 1);
} else {
setStyle1();
mCardView.bringCardToFront(mAdapter2.getCount() - 1);
}
}
});
findViewById(R.id.next).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (mIsAdapter1) {
setStyle2();
} else {
setStyle3();
}
mCardView.bringCardToFront(1);
}
});
findViewById(R.id.change).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (mCardView.isAnimating()) {
return;
}
mIsAdapter1 = !mIsAdapter1;
if (mIsAdapter1) {
setStyle2();
mCardView.setAdapter(mAdapter1);
} else {
setStyle1();
mCardView.setAdapter(mAdapter2);
}
}
});
}
private void setStyle1() {
mCardView.setClickable(true);
mCardView.setAnimType(InfiniteCardView.ANIM_TYPE_FRONT);
mCardView.setAnimInterpolator(new LinearInterpolator());
mCardView.setTransformerToFront(new DefaultTransformerToFront());
mCardView.setTransformerToBack(new DefaultTransformerToBack());
mCardView.setZIndexTransformerToBack(new DefaultZIndexTransformerCommon());
}
private void setStyle2() {
mCardView.setClickable(true);
mCardView.setAnimType(InfiniteCardView.ANIM_TYPE_SWITCH);
mCardView.setAnimInterpolator(new OvershootInterpolator(-18));
mCardView.setTransformerToFront(new DefaultTransformerToFront());
mCardView.setTransformerToBack(new AnimationTransformer() {
@Override
public void transformAnimation(View view, float fraction, int cardWidth, int cardHeight, int fromPosition, int toPosition) {
int positionCount = fromPosition - toPosition;
float scale = (0.8f - 0.1f * fromPosition) + (0.1f * fraction * positionCount);
view.setScaleX(scale);
view.setScaleY(scale);
if (fraction < 0.5) {
view.setRotationX(180 * fraction);
} else {
view.setRotationX(180 * (1 - fraction));
}
}
@Override
public void transformInterpolatedAnimation(View view, float fraction, int cardWidth, int cardHeight, int fromPosition, int toPosition) {
int positionCount = fromPosition - toPosition;
float scale = (0.8f - 0.1f * fromPosition) + (0.1f * fraction * positionCount);
view.setTranslationY(-cardHeight * (0.8f - scale) * 0.5f - cardWidth * (0.02f * fromPosition - 0.02f * fraction * positionCount));
}
});
mCardView.setZIndexTransformerToBack(new ZIndexTransformer() {
@Override
public void transformAnimation(CardItem card, float fraction, int cardWidth, int cardHeight, int fromPosition, int toPosition) {
if (fraction < 0.4f) {
card.zIndex = 1f + 0.01f * fromPosition;
} else {
card.zIndex = 1f + 0.01f * toPosition;
}
}
@Override
public void transformInterpolatedAnimation(CardItem card, float fraction, int cardWidth, int cardHeight, int fromPosition, int toPosition) {
}
});
}
private void setStyle3() {
mCardView.setClickable(false);
mCardView.setAnimType(InfiniteCardView.ANIM_TYPE_FRONT_TO_LAST);
mCardView.setAnimInterpolator(new OvershootInterpolator(-8));
mCardView.setTransformerToFront(new DefaultCommonTransformer());
mCardView.setTransformerToBack(new AnimationTransformer() {
@Override
public void transformAnimation(View view, float fraction, int cardWidth, int cardHeight, int fromPosition, int toPosition) {
int positionCount = fromPosition - toPosition;
float scale = (0.8f - 0.1f * fromPosition) + (0.1f * fraction * positionCount);
view.setScaleX(scale);
view.setScaleY(scale);
if (fraction < 0.5) {
view.setTranslationX(cardWidth * fraction * 1.5f);
view.setRotationY(-45 * fraction);
} else {
view.setTranslationX(cardWidth * 1.5f * (1f - fraction));
view.setRotationY(-45 * (1 - fraction));
}
}
@Override
public void transformInterpolatedAnimation(View view, float fraction, int cardWidth, int cardHeight, int fromPosition, int toPosition) {
int positionCount = fromPosition - toPosition;
float scale = (0.8f - 0.1f * fromPosition) + (0.1f * fraction * positionCount);
view.setTranslationY(-cardHeight * (0.8f - scale) * 0.5f - cardWidth * (0.02f * fromPosition - 0.02f * fraction * positionCount));
}
});
mCardView.setZIndexTransformerToBack(new ZIndexTransformer() {
@Override
public void transformAnimation(CardItem card, float fraction, int cardWidth, int cardHeight, int fromPosition, int toPosition) {
if (fraction < 0.5f) {
card.zIndex = 1f + 0.01f * fromPosition;
} else {
card.zIndex = 1f + 0.01f * toPosition;
}
}
@Override
public void transformInterpolatedAnimation(CardItem card, float fraction, int cardWidth, int cardHeight, int fromPosition, int toPosition) {
}
});
}
private static clreplaced MyAdapter extends BaseAdapter {
private int[] resIds = {};
MyAdapter(int[] resIds) {
this.resIds = resIds;
}
@Override
public int getCount() {
return resIds.length;
}
@Override
public Integer gereplacedem(int position) {
return resIds[position];
}
@Override
public long gereplacedemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_card, parent, false);
}
convertView.setBackgroundResource(resIds[position]);
return convertView;
}
}
}
19
Source : MultipleSelectionManager.java
with Apache License 2.0
from archos-sa
with Apache License 2.0
from archos-sa
/**
* Created by alexandre on 21/10/15.
*/
public clreplaced MultipleSelectionManager implements ActionMode.Callback {
private final Browser mBrowser;
private final BaseAdapter mBrowserAdapter;
private final AbsListView mArchosGridView;
private final SharedPreferences mPreferences;
private ActionMode mActionBar;
public MultipleSelectionManager(Browser browser, AbsListView listView, BaseAdapter browserAdapter) {
mBrowser = browser;
mArchosGridView = listView;
mBrowserAdapter = browserAdapter;
mPreferences = PreferenceManager.getDefaultSharedPreferences(mBrowser.getActivity());
}
@Override
public boolean onCreateActionMode(ActionMode mode, Menu menu) {
menu.add(0, R.string.delete, 0, R.string.delete).setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
menu.add(0, R.string.copy_on_device_multi, 0, R.string.copy_on_device_multi).setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
menu.add(0, R.string.menu_subloader_allfolder, Menu.NONE, R.string.menu_subloader_allfolder).setIcon(R.drawable.ic_menu_subreplacedles).setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER);
menu.add(0, R.string.video_browser_unindex_file, 0, R.string.video_browser_unindex_file).setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER);
menu.add(0, R.string.video_browser_index_file, 0, R.string.video_browser_index_file).setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER);
menu.add(0, R.string.mark_as_watched, 0, R.string.mark_as_watched).setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER);
menu.add(0, R.string.mark_as_not_watched, 0, R.string.mark_as_not_watched).setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER);
onPrepareActionMode(mode, menu);
return true;
}
@Override
public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
menu.findItem(R.string.delete).setVisible(mArchosGridView.getCheckedItemCount() > 0);
boolean areNotLocal = true;
boolean areFiles = true;
boolean areAllIndexed = true;
// = (isShowOrSeason || isMovieOrEpisode) && Trakt.isTraktV2Enabled(mContext, mPreferences);
boolean markAsTrakt = Trakt.isTraktV2Enabled(mBrowser.getActivity(), mPreferences);
boolean markAsWatched = false;
boolean markAsUnWatched = false;
int firstPosition = 0;
if (mArchosGridView instanceof HeaderGridView) {
firstPosition += ((HeaderGridView) mArchosGridView).getOffset();
} else if (mArchosGridView instanceof ListView) {
firstPosition += ((ListView) mArchosGridView).getHeaderViewsCount();
}
if (mArchosGridView.getCheckedItemCount() > 0) {
for (int i = firstPosition; i < mArchosGridView.getCount(); i++) {
if (mArchosGridView.getCheckedItemPositions().get(i)) {
Object obj = mBrowserAdapter.gereplacedem(i - firstPosition);
final boolean isShowOrSeason = obj instanceof Season || obj instanceof Tvshow;
final boolean isMovieOrEpisode = obj instanceof Movie || obj instanceof Episode;
Uri uri = null;
if (obj instanceof Video) {
uri = ((Video) obj).getFileUri();
} else if (obj instanceof MetaFile2) {
uri = ((MetaFile2) obj).getUri();
}
if (com.archos.filecorelibrary.Utils.isLocal(uri)) {
areNotLocal = false;
}
if (obj instanceof MetaFile2 || obj instanceof NonIndexedVideo) {
areAllIndexed = false;
if (obj instanceof MetaFile2 && ((MetaFile2) obj).isDirectory()) {
areFiles = false;
}
}
if (obj instanceof Video) {
Video video = (Video) obj;
if (markAsTrakt && (isShowOrSeason || isMovieOrEpisode)) {
if (!video.isWatched())
markAsWatched = true;
else
markAsUnWatched = true;
} else if (areFiles) {
if (video.getResumeMs() != PlayerActivity.LAST_POSITION_END) {
markAsWatched = true;
} else {
markAsUnWatched = true;
}
} else {
markAsWatched = false;
markAsUnWatched = false;
}
}
if (!areFiles && !areNotLocal)
break;
}
}
} else {
areNotLocal = false;
areFiles = false;
}
menu.findItem(R.string.video_browser_unindex_file).setVisible(areAllIndexed && mArchosGridView.getCheckedItemCount() > 0);
menu.findItem(R.string.video_browser_index_file).setVisible(!areAllIndexed && areFiles && areNotLocal);
menu.findItem(R.string.copy_on_device_multi).setVisible(areNotLocal);
menu.findItem(R.string.menu_subloader_allfolder).setVisible(areFiles);
menu.findItem(R.string.mark_as_not_watched).setVisible(markAsUnWatched);
menu.findItem(R.string.mark_as_watched).setVisible(markAsWatched);
return true;
}
@Override
public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
int firstPosition = 0;
if (mArchosGridView instanceof HeaderGridView) {
firstPosition += ((HeaderGridView) mArchosGridView).getOffset();
} else if (mArchosGridView instanceof ListView) {
firstPosition += ((ListView) mArchosGridView).getHeaderViewsCount();
}
switch(item.gereplacedemId()) {
case R.string.delete:
List<Uri> toDelete = new ArrayList<>();
for (int i = 0; i < mArchosGridView.getCount(); i++) {
if (mArchosGridView.getCheckedItemPositions().get(i)) {
toDelete.add(mBrowser.getRealPathUriFromPosition(i - firstPosition));
}
}
mBrowser.showConfirmDeleteDialog(false, toDelete);
return true;
case R.string.copy_on_device_multi:
List<Uri> toCopy = new ArrayList<>();
for (int i = 0; i < mArchosGridView.getCount(); i++) {
if (mArchosGridView.getCheckedItemPositions().get(i)) {
toCopy.add(mBrowser.getRealPathUriFromPosition(i - firstPosition));
}
}
mBrowser.startDownloadingVideo(toCopy);
return true;
case R.string.menu_subloader_allfolder:
ArrayList<String> videoPaths = new ArrayList<String>();
for (int i = 0; i < mArchosGridView.getCount(); i++) {
if (mArchosGridView.getCheckedItemPositions().get(i)) {
videoPaths.add(mBrowser.getRealPathUriFromPosition(i - firstPosition).toString());
}
}
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.setClreplaced(mBrowser.getContext(), SubreplacedlesDownloaderActivity.clreplaced);
intent.putExtra(SubreplacedlesDownloaderActivity.FILE_URLS, videoPaths);
mBrowser.startActivity(intent);
mActionBar.finish();
return true;
case R.string.video_browser_unindex_file:
ArrayList<Long> toUnindex = new ArrayList<>();
for (int i = 0; i < mArchosGridView.getCount(); i++) {
if (mArchosGridView.getCheckedItemPositions().get(i)) {
Object obj = mBrowserAdapter.gereplacedem(i - firstPosition);
if (obj instanceof Video) {
toUnindex.add(((Video) obj).getId());
}
}
}
DbUtils.markHiddenValue(mBrowser.getActivity(), toUnindex.toArray(new Long[1]), 1);
mActionBar.finish();
return true;
case R.string.video_browser_index_file:
for (int i = 0; i < mArchosGridView.getCount(); i++) {
if (mArchosGridView.getCheckedItemPositions().get(i))
VideoStore.requestIndexing(mBrowser.getRealPathUriFromPosition(i - firstPosition), mBrowser.getActivity());
}
return true;
case R.string.mark_as_watched:
for (int i = 0; i < mArchosGridView.getCount(); i++) {
if (mArchosGridView.getCheckedItemPositions().get(i)) {
Object obj = mBrowserAdapter.gereplacedem(i - firstPosition);
if (obj instanceof Video) {
final boolean isShowOrSeason = obj instanceof Season || obj instanceof Tvshow;
final boolean isMovieOrEpisode = obj instanceof Movie || obj instanceof Episode;
if ((isShowOrSeason || isMovieOrEpisode) && !((Video) obj).isWatched() || ((Video) obj).getResumeMs() != PlayerActivity.LAST_POSITION_END) {
mBrowser.markAsRead(i - firstPosition, true, mPreferences.getBoolean(BrowserByNetwork.KEY_NETWORK_BOOKMARKS, true));
}
}
}
}
return true;
case R.string.mark_as_not_watched:
for (int i = 0; i < mArchosGridView.getCount(); i++) {
if (mArchosGridView.getCheckedItemPositions().get(i)) {
Object obj = mBrowserAdapter.gereplacedem(i - firstPosition);
Uri uri = null;
if (obj instanceof Video) {
final boolean isShowOrSeason = obj instanceof Season || obj instanceof Tvshow;
final boolean isMovieOrEpisode = obj instanceof Movie || obj instanceof Episode;
if ((isShowOrSeason || isMovieOrEpisode) && ((Video) obj).isWatched() || ((Video) obj).getResumeMs() == PlayerActivity.LAST_POSITION_END) {
mBrowser.markAsNotRead(i - firstPosition, true, mPreferences.getBoolean(BrowserByNetwork.KEY_NETWORK_BOOKMARKS, true));
}
}
}
}
return true;
}
return false;
}
@Override
public void onDestroyActionMode(ActionMode mode) {
mBrowser.disableMultiple();
mActionBar = null;
}
public void destroyActionBar() {
if (mActionBar != null)
mActionBar.finish();
}
public void setActionBar(ActionMode actionBar) {
mActionBar = actionBar;
}
public void invalidateActionBar() {
mActionBar.invalidate();
}
}
19
Source : ListPopupWindowTest.java
with Apache License 2.0
from androidx
with Apache License 2.0
from androidx
// Broken on API 30 b/159743495
@SdkSuppress(maxSdkVersion = 29)
@RunWith(AndroidJUnit4.clreplaced)
public clreplaced ListPopupWindowTest {
@Rule
public final ActivityTestRule<PopupTestActivity> mActivityTestRule = new ActivityTestRule<>(PopupTestActivity.clreplaced);
private FrameLayout mContainer;
private Button mButton;
private ListPopupWindow mListPopupWindow;
private BaseAdapter mListPopupAdapter;
private AdapterView.OnItemClickListener mItemClickListener;
/**
* Item click listener that dismisses our <code>ListPopupWindow</code> when any item
* is clicked. Note that this needs to be a separate clreplaced that is also protected (not
* private) so that Mockito can "spy" on it.
*/
protected clreplaced PopupItemClickListener implements AdapterView.OnItemClickListener {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
mListPopupWindow.dismiss();
}
}
@Before
public void setUp() throws Exception {
final PopupTestActivity activity = mActivityTestRule.getActivity();
mContainer = activity.findViewById(R.id.container);
mButton = mContainer.findViewById(R.id.test_button);
mItemClickListener = new PopupItemClickListener();
}
@Test
@MediumTest
public void testBasicContent() {
Builder popupBuilder = new Builder();
popupBuilder.wireToActionButton();
onView(withId(R.id.test_button)).perform(click());
replacedertNotNull("Popup window created", mListPopupWindow);
replacedertTrue("Popup window showing", mListPopupWindow.isShowing());
final View mainDecorView = mActivityTestRule.getActivity().getWindow().getDecorView();
onView(withText("Alice")).inRoot(withDecorView(not(is(mainDecorView)))).check(matches(isDisplayed()));
onView(withText("Bob")).inRoot(withDecorView(not(is(mainDecorView)))).check(matches(isDisplayed()));
onView(withText("Charlie")).inRoot(withDecorView(not(is(mainDecorView)))).check(matches(isDisplayed()));
onView(withText("Deirdre")).inRoot(withDecorView(not(is(mainDecorView)))).check(matches(isDisplayed()));
onView(withText("El")).inRoot(withDecorView(not(is(mainDecorView)))).check(matches(isDisplayed()));
}
@FlakyTest(bugId = 33669575)
@Test
@LargeTest
public void testAnchoring() {
Builder popupBuilder = new Builder();
popupBuilder.wireToActionButton();
onView(withId(R.id.test_button)).perform(click());
replacedertTrue("Popup window showing", mListPopupWindow.isShowing());
replacedertEquals("Popup window anchor", mButton, mListPopupWindow.getAnchorView());
final int[] anchorOnScreenXY = new int[2];
final int[] popupOnScreenXY = new int[2];
final int[] popupInWindowXY = new int[2];
final Rect rect = new Rect();
mListPopupWindow.getListView().getLocationOnScreen(popupOnScreenXY);
mButton.getLocationOnScreen(anchorOnScreenXY);
mListPopupWindow.getListView().getLocationInWindow(popupInWindowXY);
mListPopupWindow.getBackground().getPadding(rect);
replacedertEquals("Anchoring X", anchorOnScreenXY[0] + popupInWindowXY[0], popupOnScreenXY[0]);
replacedertEquals("Anchoring Y", anchorOnScreenXY[1] + popupInWindowXY[1] + mButton.getHeight(), popupOnScreenXY[1] + rect.top);
}
@Test
@MediumTest
public void testDismissalViaAPI() throws Throwable {
Builder popupBuilder = new Builder().withDismissListener();
popupBuilder.wireToActionButton();
onView(withId(R.id.test_button)).perform(click());
replacedertTrue("Popup window showing", mListPopupWindow.isShowing());
mActivityTestRule.runOnUiThread(new Runnable() {
@Override
public void run() {
mListPopupWindow.dismiss();
}
});
// Verify that our dismiss listener has been called
verify(popupBuilder.mOnDismissListener, times(1)).onDismiss();
replacedertFalse("Popup window not showing after dismissal", mListPopupWindow.isShowing());
}
private void testDismissalViaTouch(boolean setupAsModal) throws Throwable {
Builder popupBuilder = new Builder().setModal(setupAsModal).withDismissListener();
popupBuilder.wireToActionButton();
final View.OnClickListener mockContainerClickListener = mock(View.OnClickListener.clreplaced);
// Also register a click listener on the top-level container
mActivityTestRule.runOnUiThread(new Runnable() {
@Override
public void run() {
mContainer.setOnClickListener(mockContainerClickListener);
}
});
onView(withId(R.id.test_button)).perform(click());
replacedertTrue("Popup window showing", mListPopupWindow.isShowing());
// Make sure that the modality of the popup window is set up correctly
replacedertEquals("Popup window modality", setupAsModal, mListPopupWindow.isModal());
// Determine the location of the popup on the screen so that we can emulate
// a tap outside of its bounds to dismiss it
final int[] popupOnScreenXY = new int[2];
final Rect rect = new Rect();
mListPopupWindow.getListView().getLocationOnScreen(popupOnScreenXY);
mListPopupWindow.getBackground().getPadding(rect);
int emulatedTapX = popupOnScreenXY[0] - rect.left - 20;
int emulatedTapY = popupOnScreenXY[1] - 20;
// The logic below uses Instrumentation to emulate a tap outside the bounds of the
// displayed list popup window. This tap is then treated by the framework to be "split" as
// the ACTION_OUTSIDE for the popup itself, as well as DOWN / MOVE / UP for the underlying
// view root if the popup is not modal.
// It is not correct to emulate these two sequences separately in the test, as it
// wouldn't emulate the user-facing interaction for this test. Note that usage
// of Instrumentation is necessary here since Espresso's actions operate at the level
// of view or data. Also, we don't want to use View.dispatchTouchEvent directly as
// that would require emulation of two separate sequences as well.
Instrumentation instrumentation = InstrumentationRegistry.getInstrumentation();
// Inject DOWN event
long downTime = SystemClock.uptimeMillis();
MotionEvent eventDown = MotionEvent.obtain(downTime, downTime, MotionEvent.ACTION_DOWN, emulatedTapX, emulatedTapY, 1);
instrumentation.sendPointerSync(eventDown);
// Inject MOVE event
long moveTime = SystemClock.uptimeMillis();
MotionEvent eventMove = MotionEvent.obtain(moveTime, moveTime, MotionEvent.ACTION_MOVE, emulatedTapX, emulatedTapY, 1);
instrumentation.sendPointerSync(eventMove);
// Inject UP event
long upTime = SystemClock.uptimeMillis();
MotionEvent eventUp = MotionEvent.obtain(upTime, upTime, MotionEvent.ACTION_UP, emulatedTapX, emulatedTapY, 1);
instrumentation.sendPointerSync(eventUp);
// Wait for the system to process all events in the queue
instrumentation.waitForIdleSync();
// At this point our popup should not be showing and should have notified its
// dismiss listener
verify(popupBuilder.mOnDismissListener, times(1)).onDismiss();
replacedertFalse("Popup window not showing after outside click", mListPopupWindow.isShowing());
// Also test that the click outside the popup bounds has been "delivered" to the main
// container only if the popup is not modal
verify(mockContainerClickListener, times(setupAsModal ? 0 : 1)).onClick(mContainer);
}
@Test
@MediumTest
public void testDismissalOutsideNonModal() throws Throwable {
testDismissalViaTouch(false);
}
@Test
@MediumTest
public void testDismissalOutsideModal() throws Throwable {
testDismissalViaTouch(true);
}
@Test
@LargeTest
public void tesreplacedemClickViaEvent() {
Builder popupBuilder = new Builder().withItemClickListener();
popupBuilder.wireToActionButton();
onView(withId(R.id.test_button)).perform(click());
replacedertTrue("Popup window showing", mListPopupWindow.isShowing());
// Verify that our menu item click listener hasn't been called yet
verify(popupBuilder.mOnItemClickListener, never()).onItemClick(any(AdapterView.clreplaced), any(View.clreplaced), any(int.clreplaced), anyLong());
final View mainDecorView = mActivityTestRule.getActivity().getWindow().getDecorView();
onView(withText("Charlie")).inRoot(withDecorView(not(is(mainDecorView)))).perform(click());
// Verify that out menu item click listener has been called with the expected item
// position. Note that we use any() for other parameters, as we don't want to tie ourselves
// to the specific implementation details of how ListPopupWindow displays its content.
verify(popupBuilder.mOnItemClickListener, times(1)).onItemClick(any(AdapterView.clreplaced), any(View.clreplaced), eq(2), anyLong());
// Our item click listener also dismisses the popup
replacedertFalse("Popup window not showing after click", mListPopupWindow.isShowing());
}
@Test
@SmallTest
public void testAccessEpicenter() {
new Builder().configure();
final Rect initialRect = new Rect(10, 10, 20, 20);
replacedertNull(mListPopupWindow.getEpicenterBounds());
mListPopupWindow.setEpicenterBounds(initialRect);
replacedertEquals(initialRect, mListPopupWindow.getEpicenterBounds());
mListPopupWindow.setEpicenterBounds(null);
replacedertNull(mListPopupWindow.getEpicenterBounds());
}
@Test
@SmallTest
public void testEpicenterSetterImmutability() {
new Builder().configure();
final Rect initialRect = new Rect(10, 10, 20, 20);
mListPopupWindow.setEpicenterBounds(initialRect);
replacedertEquals(initialRect, mListPopupWindow.getEpicenterBounds());
initialRect.offset(5, 5);
replacedertNotEquals(initialRect, mListPopupWindow.getEpicenterBounds());
}
@Test
@SmallTest
public void testEpicenterGetterImmutability() {
new Builder().configure();
final Rect initialRect = new Rect(10, 10, 20, 20);
mListPopupWindow.setEpicenterBounds(initialRect);
final Rect retrievedRect = mListPopupWindow.getEpicenterBounds();
replacedertEquals(initialRect, retrievedRect);
retrievedRect.offset(5, 5);
replacedertNotEquals(initialRect, retrievedRect);
}
@Test
@MediumTest
public void tesreplacedemClickViaAPI() throws Throwable {
Builder popupBuilder = new Builder().withItemClickListener();
popupBuilder.wireToActionButton();
onView(withId(R.id.test_button)).perform(click());
replacedertTrue("Popup window showing", mListPopupWindow.isShowing());
// Verify that our menu item click listener hasn't been called yet
verify(popupBuilder.mOnItemClickListener, never()).onItemClick(any(AdapterView.clreplaced), any(View.clreplaced), any(int.clreplaced), anyLong());
mActivityTestRule.runOnUiThread(new Runnable() {
@Override
public void run() {
mListPopupWindow.performItemClick(1);
}
});
// Verify that out menu item click listener has been called with the expected item
// position. Note that we use any() for other parameters, as we don't want to tie ourselves
// to the specific implementation details of how ListPopupWindow displays its content.
verify(popupBuilder.mOnItemClickListener, times(1)).onItemClick(any(AdapterView.clreplaced), any(View.clreplaced), eq(1), anyLong());
// Our item click listener also dismisses the popup
replacedertFalse("Popup window not showing after click", mListPopupWindow.isShowing());
}
/**
* Emulates a drag-down gestures by injecting ACTION events with {@link Instrumentation}.
*/
private void emulateDragDownGesture(int emulatedX, int emulatedStartY, int swipeAmount) {
// The logic below uses Instrumentation to emulate a swipe / drag gesture to bring up
// the popup content. Note that we don't want to use Espresso's GeneralSwipeAction
// as that operates on the level of an individual view. Here we want to test correct
// forwarding of events that cross the boundary between the anchor and the popup menu.
final Instrumentation instrumentation = InstrumentationRegistry.getInstrumentation();
// Inject DOWN event
long downTime = SystemClock.uptimeMillis();
MotionEvent eventDown = MotionEvent.obtain(downTime, downTime, MotionEvent.ACTION_DOWN, emulatedX, emulatedStartY, 1);
instrumentation.sendPointerSync(eventDown);
// Inject a sequence of MOVE events that emulate a "swipe down" gesture
for (int i = 0; i < 10; i++) {
long moveTime = SystemClock.uptimeMillis();
final int moveY = emulatedStartY + swipeAmount * i / 10;
MotionEvent eventMove = MotionEvent.obtain(moveTime, moveTime, MotionEvent.ACTION_MOVE, emulatedX, moveY, 1);
instrumentation.sendPointerSync(eventMove);
// sleep for a bit to emulate a 200ms swipe
SystemClock.sleep(20);
}
// Inject UP event
long upTime = SystemClock.uptimeMillis();
MotionEvent eventUp = MotionEvent.obtain(upTime, upTime, MotionEvent.ACTION_UP, emulatedX, emulatedStartY + swipeAmount, 1);
instrumentation.sendPointerSync(eventUp);
// Wait for the system to process all events in the queue
instrumentation.waitForIdleSync();
}
@Test
@MediumTest
public void testCreateOnDragListener() throws Throwable {
// In this test we want precise control over the height of the popup content since
// we need to know by how much to swipe down to end the emulated gesture over the
// specific item in the popup. This is why we're using a popup style that removes
// all decoration around the popup content, as well as our own row layout with known
// height.
Builder popupBuilder = new Builder().withPopupStyleAttr(R.style.PopupEmptyStyle).withContentRowLayoutId(R.layout.popup_window_item).withItemClickListener().withDismissListener();
// Configure ListPopupWindow without showing it
popupBuilder.configure();
// Get the anchor view and configure it with ListPopupWindow's drag-to-open listener
final View anchor = mActivityTestRule.getActivity().findViewById(R.id.test_button);
View.OnTouchListener dragListener = mListPopupWindow.createDragToOpenListener(anchor);
anchor.setOnTouchListener(dragListener);
// And also configure it to show the popup window on click
anchor.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mListPopupWindow.show();
}
});
// Get the height of a row item in our popup window
final int popupRowHeight = mActivityTestRule.getActivity().getResources().getDimensionPixelSize(R.dimen.popup_row_height);
final int[] anchorOnScreenXY = new int[2];
anchor.getLocationOnScreen(anchorOnScreenXY);
// Compute the start coordinates of a downward swipe and the amount of swipe. We'll
// be swiping by twice the row height. That, combined with the swipe originating in the
// center of the anchor should result in clicking the second row in the popup.
int emulatedX = anchorOnScreenXY[0] + anchor.getWidth() / 2;
int emulatedStartY = anchorOnScreenXY[1] + anchor.getHeight() / 2;
int swipeAmount = 2 * popupRowHeight;
// Emulate drag-down gesture with a sequence of motion events
emulateDragDownGesture(emulatedX, emulatedStartY, swipeAmount);
// We expect the swipe / drag gesture to result in clicking the second item in our list.
verify(popupBuilder.mOnItemClickListener, times(1)).onItemClick(any(AdapterView.clreplaced), any(View.clreplaced), eq(1), eq(1L));
// Since our item click listener calls dismiss() on the popup, we expect the popup to not
// be showing
replacedertFalse(mListPopupWindow.isShowing());
// At this point our popup should have notified its dismiss listener
verify(popupBuilder.mOnDismissListener, times(1)).onDismiss();
}
/**
* Inner helper clreplaced to configure an instance of <code>ListPopupWindow</code> for the
* specific test. The main reason for its existence is that once a popup window is shown
* with the show() method, most of its configuration APIs are no-ops. This means that
* we can't add logic that is specific to a certain test (such as dismissing a non-modal
* popup window) once it's shown and we have a reference to a displayed ListPopupWindow.
*/
public clreplaced Builder {
private boolean mIsModal;
private boolean mHasDismissListener;
private boolean mHasItemClickListener;
private AdapterView.OnItemClickListener mOnItemClickListener;
private PopupWindow.OnDismissListener mOnDismissListener;
private int mContentRowLayoutId = R.layout.abc_popup_menu_item_layout;
private boolean mUseCustomPopupStyle;
private int mPopupStyleAttr;
public Builder setModal(boolean isModal) {
mIsModal = isModal;
return this;
}
public Builder withContentRowLayoutId(int contentRowLayoutId) {
mContentRowLayoutId = contentRowLayoutId;
return this;
}
public Builder withPopupStyleAttr(int popupStyleAttr) {
mUseCustomPopupStyle = true;
mPopupStyleAttr = popupStyleAttr;
return this;
}
public Builder withItemClickListener() {
mHasItemClickListener = true;
return this;
}
public Builder withDismissListener() {
mHasDismissListener = true;
return this;
}
private void configure() {
final Context context = mContainer.getContext();
if (mUseCustomPopupStyle) {
mListPopupWindow = new ListPopupWindow(context, null, mPopupStyleAttr, 0);
} else {
mListPopupWindow = new ListPopupWindow(context);
}
final String[] POPUP_CONTENT = new String[] { "Alice", "Bob", "Charlie", "Deirdre", "El" };
mListPopupAdapter = new BaseAdapter() {
clreplaced ViewHolder {
private TextView replacedle;
}
@Override
public int getCount() {
return POPUP_CONTENT.length;
}
@Override
public Object gereplacedem(int position) {
return POPUP_CONTENT[position];
}
@Override
public long gereplacedemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = LayoutInflater.from(parent.getContext()).inflate(mContentRowLayoutId, parent, false);
ViewHolder viewHolder = new ViewHolder();
viewHolder.replacedle = (TextView) convertView.findViewById(R.id.replacedle);
convertView.setTag(viewHolder);
}
ViewHolder viewHolder = (ViewHolder) convertView.getTag();
viewHolder.replacedle.setText(POPUP_CONTENT[position]);
return convertView;
}
};
mListPopupWindow.setAdapter(mListPopupAdapter);
mListPopupWindow.setAnchorView(mButton);
// The following mock listeners have to be set before the call to show() as
// they are set on the internally constructed drop down.
if (mHasItemClickListener) {
// Wrap our item click listener with a Mockito spy
mOnItemClickListener = spy(mItemClickListener);
// Register that spy as the item click listener on the ListPopupWindow
mListPopupWindow.setOnItemClickListener(mOnItemClickListener);
// And configure Mockito to call our original listener with onItemClick.
// This way we can have both our item click listener running to dismiss the popup
// window, and track the invocations of onItemClick with Mockito APIs.
doCallRealMethod().when(mOnItemClickListener).onItemClick(any(AdapterView.clreplaced), any(View.clreplaced), any(int.clreplaced), any(int.clreplaced));
}
if (mHasDismissListener) {
mOnDismissListener = mock(PopupWindow.OnDismissListener.clreplaced);
mListPopupWindow.setOnDismissListener(mOnDismissListener);
}
mListPopupWindow.setModal(mIsModal);
}
private void show() {
configure();
mListPopupWindow.show();
}
public void wireToActionButton() {
mButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
show();
}
});
}
}
}
19
Source : BaseCacheAdapter.java
with Apache License 2.0
from akhasoft
with Apache License 2.0
from akhasoft
/**
* The {@link android.widget.Adapter Adapter} which was designed for {@yakhont.link CacheLoader}.
* Intended to use with {@yakhont.link BaseResponseLoaderWrapper}.
*
* @param <T>
* The type of {@code BaseResponse} values
*
* @param <R>
* The type of network response
*
* @param <E>
* The type of error (if any)
*
* @param <D>
* The type of data in this adapter
*
* @yakhont.see CacheLoader
*
* @author akha
*/
public clreplaced BaseCacheAdapter<T, R, E, D> implements ListAdapter, SpinnerAdapter, Filterable {
/*
For Madmen Only
- Hermann Hesse, Steppenwolf
*/
private BaseAdapter mBaseAdapter;
private final BaseArrayAdapter<T> mArrayAdapter;
private final BaseCursorAdapter mCursorAdapter;
private final ArrayConverter<T, R, E, D> mConverter;
/**
* The API to convert a {@code BaseResponse} to collection.
*
* @param <T>
* The type of {@code BaseResponse} values
*
* @param <R>
* The type of network response
*
* @param <E>
* The type of error (if any)
*
* @param <D>
* The type of data
*/
@SuppressWarnings("WeakerAccess")
public interface ArrayConverter<T, R, E, D> {
/**
* Converts data in {@code BaseResponse} to collection.
*
* @param baseResponse
* The {@code BaseResponse}
*
* @return The Collection
*/
Collection<? extends T> convert(BaseResponse<R, E, D> baseResponse);
}
/**
* For internal use only.
*
* <p>As Martin Fowler pointed out, {@link <a href="http://martinfowler.com/ieeeSoftware/published.pdf">"Yet there’s something
* to be said for the public–published distinction being more important than the more common public–private distinction."</a>}
*
* @yakhont.see BaseSimpleCursorAdapter
*/
public interface BaseCursorAdapter extends ListAdapter, SpinnerAdapter, Filterable {
@SuppressWarnings("UnusedReturnValue")
Cursor swapCursor(Cursor cursor);
void setAdapterViewBinder(ViewBinder viewBinder);
}
/**
* The API to work with adapters (for example, {@link ValuesCacheAdapterWrapper}).
*
* @param <R>
* The type of network response
*
* @param <E>
* The type of error (if any)
*
* @param <D>
* The type of data
*/
public interface CacheAdapter<R, E, D> {
/**
* Updates the adapter with a new data.
*
* @param data
* The new data
*
* @param isMerge
* {@code true} if new data should be merged with existing ones, {@code false} otherwise
*/
void update(BaseResponse<R, E, D> data, boolean isMerge);
/**
* Resets the array adapter.
*/
void resetArray();
/**
* Returns the cursor adapter component.
*
* @return The BaseCursorAdapter
*/
BaseCursorAdapter getCursorAdapter();
}
/**
* The API related to data merging.
*/
public interface Mergeable {
/**
* Returns the "merge" flag.
*
* @return {@code true} to merge the newly loaded data with already existing, {@code false} otherwise
*/
boolean isMerge();
}
/**
* This clreplaced can be used by external clients of {@code BaseCacheAdapter} to bind values to views.
*/
@SuppressWarnings("unused")
public interface ViewBinder {
/**
* To use as a {@link #setViewValue} return type (the value is {@value}).
*/
boolean VIEW_BOUND = true;
/**
* Binds the value to the specified view.
* When binding is handled by this {@code ViewBinder}, this method must return {@link #VIEW_BOUND};
* otherwise, {@code BaseCacheAdapter} will attempts to handle the binding on its own.
*
* @param view
* The view to bind the data to
*
* @param data
* The data to bind to the view
*
* @param textRepresentation
* The String representation of the supplied data: it is either the result of data.toString() or an empty String but it is never null
*
* @return {@code true} if the value was bound to the view, {@code false} otherwise
*/
boolean setViewValue(View view, Object data, String textRepresentation);
}
/**
* Initialises a newly created {@code BaseCacheAdapter} object.
*
* @param context
* The Activity
*
* @param layoutId
* The resource identifier of a layout file that defines the views
*
* @param from
* The list of names representing the data to bind to the UI
*
* @param to
* The views that should display data in the "from" parameter
*
* @param arrayAdapter
* The BaseArrayAdapter
*
* @param converter
* The ArrayConverter
*/
@SuppressWarnings("WeakerAccess")
public BaseCacheAdapter(@NonNull final Activity context, @LayoutRes final int layoutId, @NonNull @Size(min = 1) final String[] from, @NonNull @Size(min = 1) final int[] to, @NonNull final BaseArrayAdapter<T> arrayAdapter, @NonNull final ArrayConverter<T, R, E, D> converter) {
this(SupportHelper.getBaseCursorAdapter(context, layoutId, from, to), arrayAdapter, converter);
}
/**
* Initialises a newly created {@code BaseCacheAdapter} object.
*
* @param baseCacheAdapter
* The BaseCacheAdapter
*/
@SuppressWarnings({ "unused", "WeakerAccess" })
public BaseCacheAdapter(@NonNull final BaseCacheAdapter<T, R, E, D> baseCacheAdapter) {
this(baseCacheAdapter.mCursorAdapter, baseCacheAdapter.mArrayAdapter, baseCacheAdapter.mConverter);
}
/**
* Initialises a newly created {@code BaseCacheAdapter} object.
*
* @param cursorAdapter
* The BaseCursorAdapter
*
* @param arrayAdapter
* The BaseArrayAdapter
*
* @param converter
* The ArrayConverter
*/
@SuppressWarnings("WeakerAccess")
public BaseCacheAdapter(@NonNull final BaseCursorAdapter cursorAdapter, @NonNull final BaseArrayAdapter<T> arrayAdapter, @NonNull final ArrayConverter<T, R, E, D> converter) {
mArrayAdapter = arrayAdapter;
mConverter = converter;
mCursorAdapter = cursorAdapter;
setCurrentAdapter(false);
}
/**
* Returns the cursor adapter component.
*
* @return The BaseCursorAdapter
*/
@NonNull
public BaseCursorAdapter getCursorAdapter() {
return mCursorAdapter;
}
/**
* Returns the array adapter component.
*
* @return The BaseArrayAdapter
*/
@NonNull
@SuppressWarnings("WeakerAccess")
public BaseArrayAdapter<T> getArrayAdapter() {
return mArrayAdapter;
}
/**
* Updates the adapter with a new data.
* Most implementations should use {@link ValuesCacheAdapterWrapper#update} instead.
*
* @param data
* The new data
*
* @param isMerge
* {@code true} if new data should be merged with existing ones, {@code false} otherwise
*/
public void update(@NonNull final BaseResponse<R, E, D> data, final boolean isMerge) {
final Source source = data.getSource();
switch(source) {
case NETWORK:
updateArray(mConverter.convert(data), isMerge);
break;
case CACHE:
updateCursor(data.getCursor());
break;
case TIMEOUT:
case UNKNOWN:
CoreLogger.logWarning("nothing to update 'cause of " + source);
break;
default:
CoreLogger.logError("unknown source " + source);
break;
}
}
@SuppressLint("ObsoleteSdkInt")
private void addAll(final Collection<? extends T> collection) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB)
mArrayAdapter.addAll(collection);
else
for (final T object : collection) mArrayAdapter.add(object);
}
/**
* Updates the array adapter with a new data.
*
* @param collection
* The new data
*
* @param isMerge
* {@code true} if new data should be merged with existing ones, {@code false} otherwise
*/
@MainThread
@SuppressWarnings("WeakerAccess")
public void updateArray(final Collection<? extends T> collection, final boolean isMerge) {
setCurrentAdapter(true);
if (!isMerge)
mArrayAdapter.clear();
if (collection != null)
addAll(collection);
}
/**
* Resets the array adapter.
* Most implementations should use {@link ValuesCacheAdapterWrapper#resetArray} instead.
*/
public void resetArray() {
mArrayAdapter.clear();
}
/**
* Updates the cursor adapter with a new data.
*
* @param cursor
* The new data
*/
@MainThread
@SuppressWarnings("WeakerAccess")
public void updateCursor(final Cursor cursor) {
setCurrentAdapter(false);
mCursorAdapter.swapCursor(cursor != null && cursor.getCount() > 0 ? cursor : null);
}
/**
* Sets adapter to use.
*
* @param isArray
* {@code true} means the array adapter, {@code false} - the cursor one
*/
@SuppressWarnings("WeakerAccess")
public void setCurrentAdapter(final boolean isArray) {
mBaseAdapter = isArray ? mArrayAdapter : (BaseAdapter) mCursorAdapter;
}
/**
* Returns {@code true} if current adapter in use is the cursor one, {@code false} otherwise.
*
* @return The current adapter flag
*/
@SuppressWarnings("WeakerAccess")
protected boolean isCursorAdapter() {
return mBaseAdapter == mCursorAdapter;
}
/**
* Registers the {@code ViewBinder} to use.
* Most implementations should use {@link ValuesCacheAdapterWrapper#setAdapterViewBinder} instead.
*
* @param viewBinder
* The ViewBinder
*
* @return This {@code BaseCacheAdapter} object
*
* @see BaseArrayAdapter#setAdapterViewBinder
* @see BaseCursorAdapter#setAdapterViewBinder
*/
@SuppressWarnings({ "unused", "UnusedReturnValue" })
public BaseCacheAdapter<T, R, E, D> setAdapterViewBinder(final ViewBinder viewBinder) {
mArrayAdapter.setAdapterViewBinder(viewBinder);
mCursorAdapter.setAdapterViewBinder(viewBinder);
return this;
}
// //////////////////////////////////////////////////////////////////////////////////////////////
/**
* @exclude
*/
@SuppressWarnings("JavaDoc")
public static View findListView(@NonNull final View view) {
return ViewHelper.findView(view, new ViewHelper.ViewVisitor() {
@Override
public boolean handle(final View view) {
return view instanceof AbsListView || view instanceof RecyclerView;
}
});
}
/**
* @exclude
*/
@SuppressWarnings("JavaDoc")
public static int[] getViewsBinding(@NonNull final Context context, @LayoutRes final int layoutId, @NonNull final Set<String> set) {
final Map<Integer, String> map = Core.Utils.newMap();
final Resources resources = context.getResources();
final ViewInflater viewInflater = new ViewInflater(context, layoutId);
ViewHelper.visitView(viewInflater.inflate(null), new ViewHelper.ViewVisitor() {
@Override
public boolean handle(final View view) {
final int id = view.getId();
if (id != Core.NOT_VALID_VIEW_ID && view.getVisibility() == View.VISIBLE && (view instanceof TextView || view instanceof ImageView))
map.put(id, resources.getResourceEntryName(id));
// force to handle all views
return !ViewHelper.VIEW_FOUND;
}
});
CoreLogger.log(map.size() > 0 ? Level.DEBUG : Level.ERROR, "views binding: totally " + map.size());
final int[] ids = new int[map.size()];
set.clear();
for (final Map.Entry<Integer, String> entry : map.entrySet()) {
ids[set.size()] = entry.getKey();
set.add(entry.getValue());
CoreLogger.log("views binding: added " + entry.getValue());
}
return ids;
}
// //////////////////////////////////////////////////////////////////////////////////////////////
/**
* Please refer to the base method description.
*/
@Override
public Filter getFilter() {
return isCursorAdapter() ? mCursorAdapter.getFilter() : mArrayAdapter.getFilter();
}
/**
* Please refer to the base method description.
*/
@Override
public boolean areAllItemsEnabled() {
return mBaseAdapter.areAllItemsEnabled();
}
/**
* Please refer to the base method description.
*/
@Override
public boolean isEnabled(int position) {
return mBaseAdapter.isEnabled(position);
}
/**
* Please refer to the base method description.
*/
@Override
public View getDropDownView(int position, View convertView, ViewGroup parent) {
return mBaseAdapter.getDropDownView(position, convertView, parent);
}
/**
* Please refer to the base method description.
*/
@Override
public int getCount() {
return mBaseAdapter.getCount();
}
/**
* Please refer to the base method description.
*/
@Override
@SuppressWarnings("unchecked")
public T gereplacedem(int position) {
return (T) mBaseAdapter.gereplacedem(position);
}
/**
* Please refer to the base method description.
*/
@Override
public long gereplacedemId(int position) {
return mBaseAdapter.gereplacedemId(position);
}
/**
* Please refer to the base method description.
*/
@Override
public int gereplacedemViewType(int position) {
return mBaseAdapter.gereplacedemViewType(position);
}
/**
* Please refer to the base method description.
*/
@Override
public View getView(int position, View convertView, ViewGroup parent) {
return mBaseAdapter.getView(position, convertView, parent);
}
/**
* Please refer to the base method description.
*/
@Override
public int getViewTypeCount() {
return mBaseAdapter.getViewTypeCount();
}
/**
* Please refer to the base method description.
*/
@Override
public boolean hreplacedtableIds() {
return mBaseAdapter.hreplacedtableIds();
}
/**
* Please refer to the base method description.
*/
@Override
public boolean isEmpty() {
return mBaseAdapter.isEmpty();
}
/**
* Please refer to the base method description.
*/
@Override
public void registerDataSetObserver(DataSetObserver observer) {
mCursorAdapter.registerDataSetObserver(observer);
mArrayAdapter.registerDataSetObserver(observer);
}
/**
* Please refer to the base method description.
*/
@Override
public void unregisterDataSetObserver(DataSetObserver observer) {
mCursorAdapter.unregisterDataSetObserver(observer);
mArrayAdapter.unregisterDataSetObserver(observer);
}
// //////////////////////////////////////////////////////////////////////////////////////////////
/**
* The adapter intended to use on modern devices (API version >= {@link android.os.Build.VERSION_CODES#M M}).
*
* @param <T>
* The type of {@code BaseResponse} values
*
* @param <R>
* The type of network response
*
* @param <E>
* The type of error (if any)
*
* @param <D>
* The type of data in this adapter
*/
@TargetApi(Build.VERSION_CODES.M)
public static clreplaced ApiMCacheAdapter<T, R, E, D> extends BaseCacheAdapter<T, R, E, D> implements ThemedSpinnerAdapter {
/**
* Initialises a newly created {@code ApiMCacheAdapter} object.
*
* @param context
* The Activity
*
* @param layoutId
* The resource identifier of a layout file that defines the views
*
* @param from
* The list of names representing the data to bind to the UI
*
* @param to
* The views that should display data in the "from" parameter
*
* @param arrayAdapter
* The BaseArrayAdapter
*
* @param converter
* The ArrayConverter
*/
public ApiMCacheAdapter(@NonNull final Activity context, @LayoutRes final int layoutId, @NonNull @Size(min = 1) final String[] from, @NonNull @Size(min = 1) final int[] to, @NonNull final BaseArrayAdapter<T> arrayAdapter, @NonNull final ArrayConverter<T, R, E, D> converter) {
super(context, layoutId, from, to, arrayAdapter, converter);
}
/**
* Please refer to the base method description.
*/
@Override
@SuppressWarnings("unchecked")
public Resources.Theme getDropDownViewTheme() {
return ((ThemedSpinnerAdapter) (isCursorAdapter() ? getCursorAdapter() : getArrayAdapter())).getDropDownViewTheme();
}
/**
* Please refer to the base method description.
*/
@Override
public void setDropDownViewTheme(Resources.Theme theme) {
if (isCursorAdapter())
((ThemedSpinnerAdapter) getCursorAdapter()).setDropDownViewTheme(theme);
else
getArrayAdapter().setDropDownViewTheme(theme);
}
}
/**
* The adapter intended to use on devices with API version < {@link android.os.Build.VERSION_CODES#M M}.
*
* @param <T>
* The type of {@code BaseResponse} values
*
* @param <R>
* The type of network response
*
* @param <E>
* The type of error (if any)
*
* @param <D>
* The type of data in this adapter
*/
public static clreplaced SupportCacheAdapter<T, R, E, D> extends BaseCacheAdapter<T, R, E, D> implements android.support.v7.widget.ThemedSpinnerAdapter {
private final android.support.v7.widget.ThemedSpinnerAdapter.Helper mDropDownHelper;
@LayoutRes
private final int mLayoutId;
/**
* Initialises a newly created {@code SupportCacheAdapter} object.
*
* @param context
* The Activity
*
* @param layoutId
* The resource identifier of a layout file that defines the views
*
* @param from
* The list of names representing the data to bind to the UI
*
* @param to
* The views that should display data in the "from" parameter
*
* @param arrayAdapter
* The BaseArrayAdapter
*
* @param converter
* The ArrayConverter
*/
public SupportCacheAdapter(@NonNull final Activity context, @LayoutRes final int layoutId, @NonNull @Size(min = 1) final String[] from, @NonNull @Size(min = 1) final int[] to, @NonNull final BaseArrayAdapter<T> arrayAdapter, @NonNull final ArrayConverter<T, R, E, D> converter) {
super(context, layoutId, from, to, arrayAdapter, converter);
mDropDownHelper = new android.support.v7.widget.ThemedSpinnerAdapter.Helper(context);
mLayoutId = layoutId;
}
/**
* Please refer to the base method description.
*/
@Override
public Resources.Theme getDropDownViewTheme() {
return mDropDownHelper.getDropDownViewTheme();
}
/**
* Please refer to the base method description.
*/
@Override
public void setDropDownViewTheme(Resources.Theme theme) {
mDropDownHelper.setDropDownViewTheme(theme);
}
/**
* Please refer to the base method description.
*/
@Override
public View getDropDownView(int position, View convertView, ViewGroup parent) {
if (convertView == null)
convertView = mDropDownHelper.getDropDownViewInflater().inflate(mLayoutId, parent, false);
return super.getDropDownView(position, convertView, parent);
}
}
/**
* Factory used to create new {@code BaseCacheAdapter} instances.
*
* @param <T>
* The type of {@code BaseResponse} values
*
* @param <R>
* The type of network response
*
* @param <E>
* The type of error (if any)
*
* @param <D>
* The type of data in the adapter created
*/
@SuppressWarnings("unused")
public static clreplaced BaseCacheAdapterFactory<T, R, E, D> {
/**
* Initialises a newly created {@code BaseCacheAdapterFactory} object.
*/
public BaseCacheAdapterFactory() {
}
/**
* Returns a new {@code BaseCacheAdapter} instance.
*
* @param context
* The Activity
*
* @param layoutId
* The resource identifier of a layout file that defines the views
*
* @param from
* The list of names representing the data to bind to the UI
*
* @param to
* The views that should display data in the "from" parameter
*
* @param arrayAdapter
* The BaseArrayAdapter
*
* @param converter
* The ArrayConverter
*
* @param support
* {@code true} to return the {@code SupportCacheAdapter} instance, {@code false} otherwise
*
* @return The {@code BaseCacheAdapter} instance
*/
@SuppressLint("ObsoleteSdkInt")
public BaseCacheAdapter<T, R, E, D> getAdapter(@NonNull final Activity context, @LayoutRes final int layoutId, @NonNull @Size(min = 1) final String[] from, @NonNull @Size(min = 1) final int[] to, @NonNull final BaseArrayAdapter<T> arrayAdapter, @NonNull final ArrayConverter<T, R, E, D> converter, final boolean support) {
if (support)
return new SupportCacheAdapter<>(context, layoutId, from, to, arrayAdapter, converter);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M)
return new ApiMCacheAdapter<>(context, layoutId, from, to, arrayAdapter, converter);
else
return new BaseCacheAdapter<>(context, layoutId, from, to, arrayAdapter, converter);
}
}
/**
* @exclude
*/
@SuppressWarnings("JavaDoc")
public static void bindImageView(@NonNull final Context context, @NonNull final ImageView imageView, final Object value) {
final String strValue = getString(value);
try {
imageView.setImageResource(Integer.parseInt(strValue));
} catch (NumberFormatException e) {
Picreplacedo.with(context).load(getString(value)).into(imageView);
}
}
/**
* @exclude
*/
@SuppressWarnings("JavaDoc")
public static String getString(final Object value) {
return value == null ? null : value instanceof Exception ? null : value instanceof byte[] ? "" : value.toString();
}
// //////////////////////////////////////////////////////////////////////////////////////////////
/**
* Extends {@code ArrayAdapter} to provide additional view binding possibilities
* (the same way as in {@link android.widget.SimpleCursorAdapter}).
*
* @param <T>
* The type of {@code BaseResponse} values
*/
@SuppressWarnings("WeakerAccess")
public static clreplaced BaseArrayAdapter<T> extends ArrayAdapter<T> {
private final DataBinder<T> mDataBinder;
private final ViewInflater mViewInflater;
/**
* @exclude
*/
@SuppressWarnings("JavaDoc")
protected BaseArrayAdapter(@NonNull final Context context, @LayoutRes final int layoutId, @NonNull final DataBinder<T> dataBinder) {
super(context, layoutId);
mDataBinder = dataBinder;
mViewInflater = new ViewInflater(context, layoutId);
}
/**
* Gets the registered {@code ViewBinder} (if any).
*
* @return Thee {@code ViewBinder} or null
*/
@SuppressWarnings("unused")
public ViewBinder getAdapterViewBinder() {
return mDataBinder.getAdapterViewBinder();
}
/**
* Registers the {@code ViewBinder}.
* Most implementations should use {@link ValuesCacheAdapterWrapper#setAdapterViewBinder} instead.
*
* @param viewBinder
* The ViewBinder
*/
public void setAdapterViewBinder(final ViewBinder viewBinder) {
mDataBinder.setAdapterViewBinder(viewBinder);
}
/**
* Please refer to the base method description.
*/
@NonNull
@Override
public View getView(int position, View convertView, @NonNull ViewGroup parent) {
return mDataBinder.bind(position, gereplacedem(position), convertView == null ? mViewInflater.inflate(parent) : convertView);
}
/**
* @exclude
*/
@SuppressWarnings("JavaDoc")
public String[] getFrom() {
return mDataBinder.mFrom;
}
/**
* @exclude
*/
@SuppressWarnings("JavaDoc")
public int[] getTo() {
return mDataBinder.mTo;
}
}
// //////////////////////////////////////////////////////////////////////////////////////////////
/**
* @exclude
*/
@SuppressWarnings("JavaDoc")
public static abstract clreplaced DataBinder<T> {
private final Context mContext;
private ViewBinder mViewBinder;
@SuppressWarnings("WeakerAccess")
protected final String[] mFrom;
@SuppressWarnings("WeakerAccess")
protected final int[] mTo;
public DataBinder(@NonNull final Context context, @NonNull @Size(min = 1) final String[] from, @NonNull @Size(min = 1) final int[] to) {
mContext = context;
mFrom = from;
mTo = to;
}
public ViewBinder getAdapterViewBinder() {
return mViewBinder;
}
public void setAdapterViewBinder(final ViewBinder viewBinder) {
mViewBinder = viewBinder;
}
public View bind(final int position, final T item, final View mainView) {
if (item == null) {
CoreLogger.logError("item is null, position = " + position);
return mainView;
}
for (int i = 0; i < mTo.length; i++) {
final View view = mainView.findViewById(mTo[i]);
if (view == null) {
CoreLogger.logError("view not found, index = " + i);
continue;
}
try {
setViewValue(view, item, i);
} catch (Exception exception) {
CoreLogger.log("setViewValue failed", exception);
}
}
return mainView;
}
private void setViewValue(@NonNull final View view, @NonNull final T item, final int index) {
final Object value = getValue(item, index);
final String strValue = getString(value);
if (mViewBinder != null && mViewBinder.setViewValue(view, value, strValue == null ? "" : strValue))
return;
if (view instanceof Checkable)
((Checkable) view).setChecked(Boolean.parseBoolean(strValue));
else if (view instanceof TextView)
((TextView) view).setText(strValue);
else if (view instanceof ImageView)
bindImageView(mContext, (ImageView) view, value);
else
CoreLogger.logError("not supported view type, index = " + index);
}
protected abstract Object getValue(@NonNull final T item, final int index);
}
// //////////////////////////////////////////////////////////////////////////////////////////////
/**
* @exclude
*/
@SuppressWarnings("JavaDoc")
public static clreplaced ViewInflater {
private final LayoutInflater mInflater;
@LayoutRes
private final int mLayoutId;
public ViewInflater(@NonNull final Context context, @LayoutRes final int layoutId) {
mLayoutId = layoutId;
mInflater = LayoutInflater.from(context);
if (mLayoutId == Core.NOT_VALID_RES_ID)
CoreLogger.logError("item layout ID is not defined");
}
public View inflate(final ViewGroup parent) {
return mLayoutId == Core.NOT_VALID_RES_ID ? null : mInflater.inflate(mLayoutId, parent, false);
}
@SuppressWarnings("unused")
@LayoutRes
public int getLayoutId() {
return mLayoutId;
}
}
}
19
Source : ErrorsAdapter.java
with GNU General Public License v2.0
from 4455jkjh
with GNU General Public License v2.0
from 4455jkjh
public clreplaced ErrorsAdapter extends ErrorTree implements TreeAdapter<ErrorTree>, Runnable {
@Override
public boolean shouldShowExpandDrawable() {
return false;
}
private Handler handler;
private BaseAdapter adapter;
public ErrorsAdapter() {
super("");
}
@Override
public String getMessage() {
return "";
}
public void reset() {
if (handler == null)
handler = new Handler();
handler.post(this);
}
@Override
public void run() {
childs.clear();
Settings.project.addErrors(this);
editor.showErrors(getChildCount() > 0);
adapter.notifyDataSetChanged();
}
public void refresh() {
if (adapter != null)
adapter.notifyDataSetChanged();
}
@Override
public void init(BaseAdapter adapter) {
this.adapter = adapter;
}
@Override
public ErrorTree getRoot() {
return this;
}
@Override
public int getChildCount(ErrorTree t) {
return t.getChildCount();
}
@Override
public ErrorTree getChild(ErrorTree t, int idx) {
return t.getChild(idx);
}
@Override
public void bindView(TextView name, ImageView icon, ErrorTree t) {
name.setText(t.getMessage());
t.setIcon(icon);
}
@Override
public void onClick(ErrorTree t, View view) {
t.click(view);
}
}
19
Source : ErrorsAdapter.java
with GNU General Public License v2.0
from 4455jkjh
with GNU General Public License v2.0
from 4455jkjh
@Override
public void init(BaseAdapter adapter) {
this.adapter = adapter;
}
18
Source : ActionSheetDialog.java
with Apache License 2.0
from Yuphee
with Apache License 2.0
from Yuphee
/**
* Dialog like iOS ActionSheet(iOS风格对话框)
*/
public clreplaced ActionSheetDialog extends BottomBaseDialog<ActionSheetDialog> {
/**
* ListView
*/
private ListView mLv;
/**
* replacedle
*/
private TextView mTvreplacedle;
/**
* replacedle underline(标题下划线)
*/
private View mVLinereplacedle;
/**
* mCancel button(取消按钮)
*/
private TextView mTvCancel;
/**
* corner radius,dp(圆角程度,单位dp)
*/
private float mCornerRadius = 5;
/**
* replacedle background color(标题背景颜色)
*/
private int mreplacedleBgColor = Color.parseColor("#ffffffff");
/**
* replacedle text(标题)
*/
private String mreplacedle = "提示";
/**
* replacedle height(标题栏高度)
*/
private float mreplacedleHeight = 48;
/**
* replacedle textcolor(标题颜色)
*/
private int mreplacedleTextColor = Color.parseColor("#8F8F8F");
/**
* replacedle textsize(标题字体大小,单位sp)
*/
private float mreplacedleTextSize = 17.5f;
/**
* ListView background color(ListView背景色)
*/
private int mLvBgColor = Color.parseColor("#ffffffff");
/**
* divider color(ListView divider颜色)
*/
private int mDividerColor = Color.parseColor("#D7D7D9");
/**
* divider height(ListView divider高度)
*/
private float mDividerHeight = 0.8f;
/**
* item press color(ListView item按住颜色)
*/
private int mItemPressColor = Color.parseColor("#ffcccccc");
/**
* item textcolor(ListView item文字颜色)
*/
private int mItemTextColor = Color.parseColor("#44A2FF");
/**
* item textsize(ListView item文字大小)
*/
private float mItemTextSize = 17.5f;
/**
* item height(ListView item高度)
*/
private float mItemHeight = 48;
/**
* enable replacedle show(是否显示标题)
*/
private boolean mIsreplacedleShow = true;
/**
* cancel btn text(取消按钮内容)
*/
private String mCancelText = "取消";
/**
* cancel btn text color(取消按钮文字颜色)
*/
private int mCancelTextColor = Color.parseColor("#44A2FF");
/**
* cancel btn text size(取消按钮文字大小)
*/
private float mCancelTextSize = 17.5f;
/**
* adapter(自定义适配器)
*/
private BaseAdapter mAdapter;
/**
* operation items(操作items)
*/
private ArrayList<DialogMenuItem> mContents = new ArrayList<>();
private OnOperItemClickL mOnOperItemClickL;
private LayoutAnimationController mLac;
public void setOnOperItemClickL(OnOperItemClickL onOperItemClickL) {
mOnOperItemClickL = onOperItemClickL;
}
public ActionSheetDialog(Context context, ArrayList<DialogMenuItem> baseItems, View animateView) {
super(context, animateView);
mContents.addAll(baseItems);
init();
}
public ActionSheetDialog(Context context, String[] items, View animateView) {
super(context, animateView);
mContents = new ArrayList<>();
for (String item : items) {
DialogMenuItem customBaseItem = new DialogMenuItem(item, 0);
mContents.add(customBaseItem);
}
init();
}
public ActionSheetDialog(Context context, BaseAdapter adapter, View animateView) {
super(context, animateView);
mAdapter = adapter;
init();
}
private void init() {
widthScale(0.95f);
/**
* LayoutAnimation
*/
TranslateAnimation animation = new TranslateAnimation(Animation.RELATIVE_TO_SELF, 0f, Animation.RELATIVE_TO_SELF, 0f, Animation.RELATIVE_TO_SELF, 6f, Animation.RELATIVE_TO_SELF, 0);
animation.setInterpolator(new DecelerateInterpolator());
animation.setDuration(350);
animation.setStartOffset(150);
mLac = new LayoutAnimationController(animation, 0.12f);
mLac.setInterpolator(new DecelerateInterpolator());
}
@Override
public View onCreateView() {
LinearLayout ll_container = new LinearLayout(mContext);
ll_container.setOrientation(LinearLayout.VERTICAL);
ll_container.setBackgroundColor(Color.TRANSPARENT);
/**
* replacedle
*/
mTvreplacedle = new TextView(mContext);
mTvreplacedle.setGravity(Gravity.CENTER);
mTvreplacedle.setPadding(dp2px(10), dp2px(5), dp2px(10), dp2px(5));
LayoutParams params = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
params.topMargin = dp2px(20);
ll_container.addView(mTvreplacedle, params);
/**
* replacedle underline
*/
mVLinereplacedle = new View(mContext);
ll_container.addView(mVLinereplacedle);
/**
* listview
*/
mLv = new ListView(mContext);
mLv.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT, 1));
mLv.setCacheColorHint(Color.TRANSPARENT);
mLv.setFadingEdgeLength(0);
mLv.setVerticalScrollBarEnabled(false);
mLv.setSelector(new ColorDrawable(Color.TRANSPARENT));
ll_container.addView(mLv);
TextView cancelDivider = new TextView(mContext);
cancelDivider.setGravity(Gravity.CENTER);
cancelDivider.setBackgroundColor(Color.parseColor("#ffefefef"));
LayoutParams clp = new LayoutParams(LayoutParams.MATCH_PARENT, 20);
cancelDivider.setLayoutParams(clp);
ll_container.addView(cancelDivider);
/**
* mCancel btn
*/
mTvCancel = new TextView(mContext);
mTvCancel.setGravity(Gravity.CENTER);
LayoutParams lp = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
lp.topMargin = dp2px(0);
lp.bottomMargin = dp2px(0);
mTvCancel.setLayoutParams(lp);
ll_container.addView(mTvCancel);
return ll_container;
}
@Override
public void setUiBeforShow() {
/**
* replacedle
*/
float radius = dp2px(mCornerRadius);
mTvreplacedle.setHeight(dp2px(mreplacedleHeight));
mTvreplacedle.setBackgroundDrawable(CornerUtils.cornerDrawable(mreplacedleBgColor, new float[] { radius, radius, radius, radius, 0, 0, 0, 0 }));
mTvreplacedle.setText(mreplacedle);
mTvreplacedle.setTextSize(TypedValue.COMPLEX_UNIT_SP, mreplacedleTextSize);
mTvreplacedle.setTextColor(mreplacedleTextColor);
mTvreplacedle.setVisibility(mIsreplacedleShow ? View.VISIBLE : View.GONE);
/**
* replacedle underline
*/
mVLinereplacedle.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, dp2px(mDividerHeight)));
mVLinereplacedle.setBackgroundColor(mDividerColor);
mVLinereplacedle.setVisibility(mIsreplacedleShow ? View.VISIBLE : View.GONE);
/**
* mCancel btn
*/
mTvCancel.setHeight(dp2px(mItemHeight));
mTvCancel.setText(mCancelText);
mTvCancel.setTextSize(TypedValue.COMPLEX_UNIT_SP, mCancelTextSize);
mTvCancel.setTextColor(mCancelTextColor);
mTvCancel.setBackgroundDrawable(CornerUtils.lisreplacedemSelector(radius, mLvBgColor, mItemPressColor, 1, 0));
mTvCancel.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dismiss();
}
});
/**
* listview
*/
mLv.setDivider(new ColorDrawable(mDividerColor));
mLv.setDividerHeight(dp2px(mDividerHeight));
if (mIsreplacedleShow) {
mLv.setBackgroundDrawable(CornerUtils.cornerDrawable(mLvBgColor, new float[] { 0, 0, 0, 0, radius, radius, radius, radius }));
} else {
mLv.setBackgroundDrawable(CornerUtils.cornerDrawable(mLvBgColor, radius));
}
if (mAdapter == null) {
mAdapter = new ListDialogAdapter();
}
mLv.setAdapter(mAdapter);
mLv.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
if (mOnOperItemClickL != null) {
mOnOperItemClickL.onOperItemClick(parent, view, position, id);
}
}
});
mLv.setLayoutAnimation(mLac);
}
/**
* set replacedle background color(设置标题栏背景色)
*/
public ActionSheetDialog replacedleBgColor(int replacedleBgColor) {
mreplacedleBgColor = replacedleBgColor;
return this;
}
/**
* set replacedle text(设置标题内容)
*/
public ActionSheetDialog replacedle(String replacedle) {
mreplacedle = replacedle;
return this;
}
/**
* set replacedleHeight(设置标题高度)
*/
public ActionSheetDialog replacedleHeight(float replacedleHeight) {
mreplacedleHeight = replacedleHeight;
return this;
}
/**
* set replacedle textsize(设置标题字体大小)
*/
public ActionSheetDialog replacedleTextSize_SP(float replacedleTextSize_SP) {
mreplacedleTextSize = replacedleTextSize_SP;
return this;
}
/**
* set replacedle textcolor(设置标题字体颜色)
*/
public ActionSheetDialog replacedleTextColor(int replacedleTextColor) {
mreplacedleTextColor = replacedleTextColor;
return this;
}
/**
* enable replacedle show(设置标题是否显示)
*/
public ActionSheetDialog isreplacedleShow(boolean isreplacedleShow) {
mIsreplacedleShow = isreplacedleShow;
return this;
}
/**
* set ListView background color(设置ListView背景)
*/
public ActionSheetDialog lvBgColor(int lvBgColor) {
mLvBgColor = lvBgColor;
return this;
}
/**
* set corner radius(设置圆角程度,单位dp)
*/
public ActionSheetDialog cornerRadius(float cornerRadius_DP) {
mCornerRadius = cornerRadius_DP;
return this;
}
/**
* set divider color(ListView divider颜色)
*/
public ActionSheetDialog dividerColor(int dividerColor) {
mDividerColor = dividerColor;
return this;
}
/**
* set divider height(ListView divider高度)
*/
public ActionSheetDialog dividerHeight(float dividerHeight_DP) {
mDividerHeight = dividerHeight_DP;
return this;
}
/**
* set item press color(item按住颜色)
*/
public ActionSheetDialog itemPressColor(int itemPressColor) {
mItemPressColor = itemPressColor;
return this;
}
/**
* set item textcolor(item字体颜色)* @return ActionSheetDialog
*/
public ActionSheetDialog itemTextColor(int itemTextColor) {
mItemTextColor = itemTextColor;
return this;
}
/**
* set item textsize(item字体大小)
*/
public ActionSheetDialog itemTextSize(float itemTextSize_SP) {
mItemTextSize = itemTextSize_SP;
return this;
}
/**
* set item height(item高度)
*/
public ActionSheetDialog itemHeight(float itemHeight_DP) {
mItemHeight = itemHeight_DP;
return this;
}
/**
* set layoutAnimation(设置layout动画 ,传入null将不显示layout动画)
*/
public ActionSheetDialog layoutAnimation(LayoutAnimationController lac) {
mLac = lac;
return this;
}
/**
* set cancel btn text(设置取消按钮内容)
*/
public ActionSheetDialog cancelText(String cancelText) {
mCancelText = cancelText;
return this;
}
/**
* cancel btn text color(取消按钮文字颜色)
*/
public ActionSheetDialog cancelText(int cancelTextColor) {
mCancelTextColor = cancelTextColor;
return this;
}
/**
* cancel btn text size(取消按钮文字大小)
*/
public ActionSheetDialog cancelTextSize(float cancelTextSize) {
mCancelTextSize = cancelTextSize;
return this;
}
clreplaced ListDialogAdapter extends BaseAdapter {
@Override
public int getCount() {
return mContents.size();
}
@Override
public Object gereplacedem(int position) {
return null;
}
@Override
public long gereplacedemId(int position) {
return position;
}
@SuppressWarnings("deprecation")
@Override
public View getView(int position, View convertView, ViewGroup parent) {
final DialogMenuItem item = mContents.get(position);
LinearLayout llItem = new LinearLayout(mContext);
llItem.setOrientation(LinearLayout.HORIZONTAL);
llItem.setGravity(Gravity.CENTER_VERTICAL);
ImageView ivItem = new ImageView(mContext);
ivItem.setPadding(0, 0, dp2px(15), 0);
llItem.addView(ivItem);
TextView tvItem = new TextView(mContext);
tvItem.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));
tvItem.setSingleLine(true);
tvItem.setGravity(Gravity.CENTER);
tvItem.setTextColor(mItemTextColor);
tvItem.setTextSize(TypedValue.COMPLEX_UNIT_SP, mItemTextSize);
tvItem.setHeight(dp2px(mItemHeight));
llItem.addView(tvItem);
float radius = dp2px(mCornerRadius);
if (mIsreplacedleShow) {
llItem.setBackgroundDrawable((CornerUtils.lisreplacedemSelector(radius, Color.TRANSPARENT, mItemPressColor, position == mContents.size() - 1)));
} else {
llItem.setBackgroundDrawable(CornerUtils.lisreplacedemSelector(radius, Color.TRANSPARENT, mItemPressColor, mContents.size(), position));
}
ivItem.setImageResource(item.mResId);
tvItem.setText(item.mOperName);
ivItem.setVisibility(item.mResId == 0 ? View.GONE : View.VISIBLE);
return llItem;
}
}
}
18
Source : DemoSecondActivity.java
with Apache License 2.0
from XuDeveloper
with Apache License 2.0
from XuDeveloper
/**
* Created by Xu on 2016/12/17.
*/
public clreplaced DemoSecondActivity extends AppCompatActivity implements AbsListView.OnScrollListener {
private ArrayList<String> urls;
private boolean mIsGridViewIdle;
private GridView mGridView;
private BaseAdapter mImageAdapter;
private XImageLoaderConfig config;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
initDatas();
initViews();
// config settings
config = new XImageLoaderConfig();
config.setCache(new DoubleCache(DemoSecondActivity.this));
config.setLoader(new OkhttpImageLoader());
config.setLoadingResId(R.drawable.image_loading);
config.setFailResId(R.drawable.image_fail);
}
private void initDatas() {
mIsGridViewIdle = true;
urls = new ArrayList<>();
String[] imageUrls = { "http://image.bitauto.com/dealer/news/100041590/e6d8c821-176f-475c-8f32-23b65a66aa88.jpg", "http://img.jrjimg.cn/2014/10/20141028000128871.jpg", "http://n.sinaimg.cn/transform/20150116/x0aw-cczmvun5069864.jpg", "http://cms-bucket.nosdn.127.net/catchpic/9/93/935faaac49645138c6788301701f8ad1.jpg", "http://himg2.huanqiu.com/attachment2010/2013/1212/20131212021006631.jpg", "http://car.southcn.com/7/images/attachement/jpg/site4/20161104/c03fd5725abe19869a6c2d.jpg", "http://i2.dd-img.com/upload/2016/1107/1478495859583.jpg", "http://i.ce.cn/auto/auto/gundong/201611/08/W020161108584391202911.jpg", "http://img1.imgtn.bdimg.com/it/u=225246995,3631782845&fm=214&gp=0.jpg", "http://dingyue.nosdn.127.net/3OBv1SEb8G7cfex8z0waJhutyxOAzpKTgo4VVtJ5Wkitj1479286761337.jpg", "http://img.mp.itc.cn/upload/20161213/57de565f1f034d2ba1da6e6a5980086f_th.jpg", "http://news.xinhuanet.com/sports/replacedlepic/128082298_1438396856343_replacedle1n.jpg", "http://photocdn.sohu.com/20120613/Img345493678.jpg", "http://www.xnwbw.com/res/1/1/2016-02/21/A16/res01_attpic_brief.jpg", "http://img4.imgtn.bdimg.com/it/u=4063972650,2938693754&fm=11&gp=0.jpg" };
for (String url : imageUrls) {
urls.add(url);
}
}
private void initViews() {
mGridView = (GridView) findViewById(R.id.gridView);
mImageAdapter = new ImageAdapter(this, urls);
mGridView.setAdapter(mImageAdapter);
mGridView.setOnScrollListener(this);
}
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
if (scrollState == AbsListView.OnScrollListener.SCROLL_STATE_IDLE) {
mIsGridViewIdle = true;
mImageAdapter.notifyDataSetChanged();
} else {
mIsGridViewIdle = false;
}
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
}
private clreplaced ImageAdapter extends BaseAdapter {
private LayoutInflater mInflater;
private ArrayList<String> mUrls;
private ImageAdapter(Context context, ArrayList<String> urls) {
mInflater = LayoutInflater.from(context);
this.mUrls = urls;
}
@Override
public int getCount() {
return mUrls.size();
}
@Override
public String gereplacedem(int position) {
return mUrls.get(position);
}
@Override
public long gereplacedemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
if (convertView == null) {
convertView = mInflater.inflate(R.layout.image_list_item, parent, false);
holder = new ViewHolder();
holder.imageView = (ImageView) convertView.findViewById(R.id.image);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
ImageView imageView = holder.imageView;
String url = gereplacedem(position);
if (mIsGridViewIdle) {
XImageLoader.build(DemoSecondActivity.this).imageview(config, imageView).load(url);
}
return convertView;
}
}
clreplaced ViewHolder {
ImageView imageView;
}
}
18
Source : AdapterViewTestActivity.java
with Apache License 2.0
from wangzhzh
with Apache License 2.0
from wangzhzh
@SuppressWarnings("Convert2Lambda")
private void initListView() {
ListView listView = findViewById(R.id.listView);
BaseAdapter adapter = new SAListViewAdapter(this);
listView.setAdapter(adapter);
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Toast.makeText(AdapterViewTestActivity.this, "dd:" + position, Toast.LENGTH_SHORT).show();
}
});
}
18
Source : PicSeletorPresenter.java
with MIT License
from wangcantian
with MIT License
from wangcantian
@Override
public <E> void updataAndNotifyAdapter(BaseAdapter adapter, List<E> adapterDatas, List<E> newDatas) {
adapterDatas.clear();
adapterDatas.addAll(newDatas);
if (adapter != null)
adapter.notifyDataSetChanged();
}
18
Source : WhitelistActivity.java
with GNU General Public License v3.0
from TheRedSpy15
with GNU General Public License v3.0
from TheRedSpy15
public clreplaced WhitelistActivity extends AppCompatActivity {
ListView listView;
BaseAdapter adapter;
private static List<String> whiteList;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_whitelist);
listView = findViewById(R.id.whitelistView);
adapter = new ArrayAdapter<>(this, R.layout.custom_textview, getWhiteList());
listView.setAdapter(adapter);
}
/**
* Clears the whitelist, then sets it up again without loading saved one from stash
* @param view the view that is clicked
*/
public final void emptyWhitelist(View view) {
new AlertDialog.Builder(WhitelistActivity.this, R.style.MyAlertDialogTheme).setreplacedle(R.string.reset_whitelist).setMessage(R.string.are_you_reset_whitelist).setPositiveButton(R.string.reset, (dialog, whichButton) -> {
whiteList.clear();
Stash.put("whiteList", whiteList);
refreshListView();
}).setNegativeButton(R.string.cancel, (dialog, whichButton) -> {
}).show();
}
public void addRecommended(View view) {
File externalDir = Environment.getExternalStorageDirectory();
if (!whiteList.contains(new File(externalDir, "Music").getPath())) {
whiteList.add(new File(externalDir, "Music").getPath());
whiteList.add(new File(externalDir, "Podcasts").getPath());
whiteList.add(new File(externalDir, "Ringtones").getPath());
whiteList.add(new File(externalDir, "Alarms").getPath());
whiteList.add(new File(externalDir, "Notifications").getPath());
whiteList.add(new File(externalDir, "Pictures").getPath());
whiteList.add(new File(externalDir, "Movies").getPath());
whiteList.add(new File(externalDir, "Download").getPath());
whiteList.add(new File(externalDir, "DCIM").getPath());
whiteList.add(new File(externalDir, "Doreplacedents").getPath());
Stash.put("whiteList", whiteList);
refreshListView();
} else
Toast.makeText(this, "Already added", Toast.LENGTH_LONG).show();
}
/**
* Creates a dialog asking for a file/folder name to add to the whitelist
* @param view the view that is clicked
*/
public final void addToWhiteList(View view) {
final EditText input = new EditText(WhitelistActivity.this);
new AlertDialog.Builder(WhitelistActivity.this, R.style.MyAlertDialogTheme).setreplacedle(R.string.add_to_whitelist).setMessage(R.string.enter_file_name).setView(input).setPositiveButton(R.string.add, (dialog, whichButton) -> {
whiteList.add(String.valueOf(input.getText()));
Stash.put("whiteList", whiteList);
refreshListView();
}).setNegativeButton(R.string.cancel, (dialog, whichButton) -> {
}).show();
}
public void refreshListView() {
runOnUiThread(() -> {
adapter.notifyDataSetChanged();
listView.invalidateViews();
listView.refreshDrawableState();
});
}
public static synchronized List<String> getWhiteList() {
if (whiteList == null)
whiteList = Stash.getArrayList("whiteList", String.clreplaced);
return whiteList;
}
}
18
Source : MultiChoiceSettingView.java
with BSD 3-Clause "New" or "Revised" License
from Parrot-Developers
with BSD 3-Clause "New" or "Revised" License
from Parrot-Developers
public clreplaced MultiChoiceSettingView<T> extends LinearLayout {
@NonNull
private final List<T> mChoices;
@Nullable
private T mSelection;
private boolean mUpdating;
public interface OnItemChosenListener<T> {
void onItemChosen(@NonNull T chosenItem);
}
private OnItemChosenListener<T> mListener;
private final Spinner mChoiceView;
private final ProgressBar mUpdatingView;
public MultiChoiceSettingView(Context context) {
this(context, null);
}
public MultiChoiceSettingView(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
public MultiChoiceSettingView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
setWillNotDraw(true);
setSaveFromParentEnabled(false);
LayoutInflater.from(context).inflate(R.layout.view_multichoice_setting, this);
TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.MultiChoiceSettingView, defStyleAttr, 0);
try {
((TextView) findViewById(android.R.id.replacedle)).setText(a.getString(R.styleable.MultiChoiceSettingView_replacedle));
} finally {
a.recycle();
}
mChoices = new ArrayList<>();
mChoiceView = findViewById(android.R.id.edit);
mUpdatingView = findViewById(android.R.id.progress);
mChoiceView.setAdapter(mAdapter);
mChoiceView.setEmptyView(findViewById(android.R.id.empty));
mChoiceView.setOnItemSelectedListener(mItemSelectedListener);
}
@NonNull
public MultiChoiceSettingView<T> setUpdating(boolean updating) {
if (mUpdating != updating) {
mUpdating = updating;
mUpdatingView.setVisibility(mUpdating ? VISIBLE : GONE);
updateEnabledState();
}
return this;
}
@NonNull
public MultiChoiceSettingView<T> setChoices(@NonNull Set<T> choices) {
mChoices.clear();
mChoices.addAll(choices);
updateSelection();
updateEnabledState();
mAdapter.notifyDataSetChanged();
return this;
}
@NonNull
public MultiChoiceSettingView<T> setSelection(@Nullable T selection) {
if (mSelection != selection) {
mSelection = selection;
updateSelection();
}
return this;
}
@NonNull
public MultiChoiceSettingView<T> setListener(@Nullable OnItemChosenListener<T> listener) {
mListener = listener;
return this;
}
private void updateSelection() {
mChoiceView.setSelection(mSelection == null ? AdapterView.INVALID_POSITION : mChoices.indexOf(mSelection));
}
private void updateEnabledState() {
mChoiceView.setEnabled(!mUpdating && mChoices.size() > 1);
}
@SuppressWarnings("FieldCanBeLocal")
private final AdapterView.OnItemSelectedListener mItemSelectedListener = new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
T userSelection = mChoices.get(position);
if (mListener != null && userSelection != mSelection) {
mSelection = userSelection;
mListener.onItemChosen(userSelection);
}
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
};
private final BaseAdapter mAdapter = new BaseAdapter() {
@Override
public int getCount() {
return mChoices.size();
}
@Override
public T gereplacedem(int position) {
return mChoices.get(position);
}
@Override
public long gereplacedemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = LayoutInflater.from(getContext()).inflate(android.R.layout.simple_dropdown_item_1line, parent, false);
}
((TextView) convertView).setText(gereplacedem(position).toString());
return convertView;
}
};
}
18
Source : CustomAlertDialog.java
with MIT License
from netease-im
with MIT License
from netease-im
public void setAdapter(final BaseAdapter adapter, final OnItemClickListener listener) {
listAdapter = adapter;
itemListener = listener;
}
18
Source : ItemEditActivity.java
with Apache License 2.0
from LingjuAI
with Apache License 2.0
from LingjuAI
/**
* Created by Ken on 2016/12/16.
*/
public clreplaced ItemEditActivity extends GoBackActivity {
public final static int FOR_ITEM_EDIT = 9;
public final static int EXPENSE = 0;
public final static int SUB_EXPENSE = 1;
public final static int INCOME = 2;
public final static String TYPE = "type";
public final static String UPDATE = "update";
private Intent intent;
private int type = 0;
private boolean update = false;
private ListView listView;
private Item parent;
private AccounreplacedemDao dao;
private List<Item> items;
private List<SubItem> subItems;
private LayoutInflater inflater;
// 子项修改标记
private boolean isSubAdd = false;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_item_expense_edit);
View statusBar = findViewById(R.id.status_bar);
// 设置模拟状态栏的高度
ViewGroup.LayoutParams layoutParams = statusBar.getLayoutParams();
layoutParams.height = ScreenUtil.getStatusBarHeight(this);
statusBar.setLayoutParams(layoutParams);
listView = (ListView) findViewById(R.id.aiee_list);
dao = AccounreplacedemDao.getInstance();
intent = getIntent();
if (intent != null) {
type = intent.getIntExtra(TYPE, 0);
if (type == SUB_EXPENSE) {
long itemId = intent.getLongExtra("id", 0);
if (itemId > 0)
parent = dao.findItemById(itemId);
}
}
String replacedle = "";
switch(type) {
case EXPENSE:
replacedle = "支出项目类别-编辑";
items = dao.findAllByExpense(1);
break;
case SUB_EXPENSE:
replacedle = parent.gereplacedem() + "子类别-编辑";
subItems = dao.findAllByItemid(parent.getId());
break;
case INCOME:
replacedle = "收入项目类别-编辑";
items = dao.findAllByExpense(0);
break;
}
((TextView) findViewById(R.id.aiee_replacedle)).setText(replacedle);
inflater = LayoutInflater.from(this);
listView.setAdapter(adapter);
findViewById(R.id.aiee_back).setOnClickListener(clickListener);
findViewById(R.id.aiee_finish).setOnClickListener(clickListener);
findViewById(R.id.aiee_add).setOnClickListener(clickListener);
if (type == 0) {
listView.setOnItemClickListener(itemListener);
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (data != null) {
if (resultCode == FOR_ITEM_EDIT) {
if (!update)
update = data.getBooleanExtra(UPDATE, false);
isSubAdd = false;
}
}
super.onActivityResult(requestCode, resultCode, data);
}
private View.OnClickListener clickListener = new View.OnClickListener() {
@Override
public void onClick(View v) {
switch(v.getId()) {
case R.id.aiee_back:
if (update) {
if (isSubAdd) {
intent.putExtra(UPDATE, true);
setResult(FOR_ITEM_EDIT, intent);
} else
EventBus.getDefault().post(new AccounreplacedemEvent());
}
goBack();
break;
case R.id.aiee_finish:
if (update) {
if (isSubAdd) {
intent.putExtra(UPDATE, true);
setResult(FOR_ITEM_EDIT, intent);
} else
EventBus.getDefault().post(new AccounreplacedemEvent());
}
goBack();
break;
case R.id.aiee_add:
final CommonEditDialog ced = new CommonEditDialog(ItemEditActivity.this, "添加类别名称", "", "取消", "确定");
ced.setHint("最多5个汉字");
ced.setOnConfirmListener(new CommonEditDialog.OnConfirmListener() {
@Override
public void onConfirm(String text) {
if (!TextUtils.isEmpty(text)) {
ced.cancel();
if (type == 1) {
SubItem si = new SubItem(parent, text);
update = true;
dao.insertSubItem(si);
subItems = dao.findAllByItemid(parent.getId());
adapter.notifyDataSetChanged();
} else {
Item it = new Item(text);
if (type == EXPENSE)
it.setExpense(1);
update = true;
dao.inserItem(it);
items = dao.findAllByExpense(type == INCOME ? 0 : 1);
adapter.notifyDataSetChanged();
}
}
}
}).show();
break;
}
}
};
private AdapterView.OnItemClickListener itemListener = new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Intent intent = new Intent(ItemEditActivity.this, ItemEditActivity.clreplaced);
intent.putExtra(TYPE, SUB_EXPENSE);
intent.putExtra("id", items.get(position).getId());
startActivityForResult(intent, FOR_ITEM_EDIT);
goInto();
isSubAdd = true;
}
};
private BaseAdapter adapter = new BaseAdapter() {
View.OnClickListener listener = new View.OnClickListener() {
@Override
public void onClick(View v) {
if (v.getTag() instanceof Integer) {
final int p = (Integer) v.getTag();
switch(v.getId()) {
case R.id.iel_edit:
// CommonEditDialog ced=new CommonEditDialog(ItemEditActivity.this, "添加类别名称", "最多四个汉字", "取消", "确定");
if (type == 1) {
final CommonEditDialog commonEditDialog = new CommonEditDialog(ItemEditActivity.this, "修改类别名称", subItems.get(p).getName(), "取消", "确定");
commonEditDialog.setOnConfirmListener(new CommonEditDialog.OnConfirmListener() {
@Override
public void onConfirm(String text) {
if (!TextUtils.isEmpty(text)) {
subItems.get(p).setName(text);
update = true;
dao.updateSubItem(subItems.get(p));
adapter.notifyDataSetChanged();
commonEditDialog.cancel();
}
}
}).show();
} else {
final CommonEditDialog commonEditDialog = new CommonEditDialog(ItemEditActivity.this, "修改类别名称", items.get(p).gereplacedem(), "取消", "确定");
commonEditDialog.setOnConfirmListener(new CommonEditDialog.OnConfirmListener() {
@Override
public void onConfirm(String text) {
if (!TextUtils.isEmpty(text)) {
items.get(p).sereplacedem(text);
update = true;
dao.updateItem(items.get(p));
adapter.notifyDataSetChanged();
commonEditDialog.cancel();
}
}
}).show();
}
break;
case R.id.iel_del:
if (type == 1) {
final CommonDialog commonDialog = new CommonDialog(ItemEditActivity.this, "请选择是否删除", "删除“" + subItems.get(p).getName() + "”这条记录吗", "取消", "确定");
commonDialog.setOnConfirmListener(new CommonDialog.OnConfirmListener() {
@Override
public void onConfirm() {
dao.deleteSubItem(subItems.get(p));
update = true;
subItems.remove(p);
adapter.notifyDataSetChanged();
commonDialog.cancel();
}
}).show();
} else {
final CommonDialog commonDialog = new CommonDialog(ItemEditActivity.this, "请选择是否删除", "删除“" + items.get(p).gereplacedem() + "”这条记录吗", "取消", "确定");
commonDialog.setOnConfirmListener(new CommonDialog.OnConfirmListener() {
@Override
public void onConfirm() {
dao.deleteItem(items.get(p));
update = true;
items.remove(p);
adapter.notifyDataSetChanged();
commonDialog.cancel();
}
}).show();
}
break;
}
}
}
};
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// LinearLayout main;
if (convertView == null) {
convertView = inflater.inflate(R.layout.item_edit_line, null);
convertView.findViewById(R.id.iel_edit).setOnClickListener(listener);
convertView.findViewById(R.id.iel_del).setOnClickListener(listener);
}
// main = (LinearLayout) convertView;
if (type == 1) {
((TextView) convertView.findViewById(R.id.edit_line_text)).setText(subItems.get(position).getName());
if (subItems.get(position).getId() > 121) {
convertView.findViewById(R.id.item_edit_line_box).setVisibility(View.VISIBLE);
convertView.findViewById(R.id.iel_edit).setTag(position);
convertView.findViewById(R.id.iel_del).setTag(position);
} else {
convertView.findViewById(R.id.item_edit_line_box).setVisibility(View.GONE);
}
} else {
((TextView) convertView.findViewById(R.id.edit_line_text)).setText(items.get(position).gereplacedem());
if (items.get(position).getId() > 16) {
convertView.findViewById(R.id.item_edit_line_box).setVisibility(View.VISIBLE);
convertView.findViewById(R.id.iel_edit).setTag(position);
convertView.findViewById(R.id.iel_del).setTag(position);
} else {
convertView.findViewById(R.id.item_edit_line_box).setVisibility(View.GONE);
}
}
return convertView;
}
@Override
public boolean isEnabled(int position) {
return type == 1 ? false : type == 2 ? false : true;
}
@Override
public long gereplacedemId(int position) {
// TODO Auto-generated method stub
return 0;
}
@Override
public Object gereplacedem(int position) {
// TODO Auto-generated method stub
return null;
}
@Override
public int getCount() {
return type == 1 ? subItems.size() : items.size();
}
};
}
18
Source : AlbumActivity.java
with MIT License
from Liberuman
with MIT License
from Liberuman
/**
* @author Freeman
* @date 2017/12/21
*/
public clreplaced AlbumActivity extends AppCompatActivity {
private GridView photoGrid;
private BaseAdapter photoAdapter;
private ArrayList<String> selectedPhotos = new ArrayList<>();
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_album_layout);
Button chooseButton = (Button) findViewById(R.id.choose_button);
Button chooseWxButton = (Button) findViewById(R.id.choose_wx_button);
photoGrid = (GridView) findViewById(R.id.photo_grid);
int type = getIntent().getIntExtra("type", 0);
if (!ImageLoaderManager.getInstance().isInit()) {
if (type == 0) {
ImageLoaderManager.getInstance().init(getApplicationContext(), new FrescoInstance());
} else if (type == 1) {
ImageLoaderManager.getInstance().init(getApplicationContext(), new UILInstance());
} else if (type == 2) {
ImageLoaderManager.getInstance().init(getApplicationContext(), new GlideInstance());
} else {
/**
* Nothing
*/
}
}
chooseButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
openDefaultPhotoPicker();
}
});
chooseWxButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
openWxPhotoPicker();
}
});
}
/**
* 使用默认的图片选择组件
*/
private void openDefaultPhotoPicker() {
PhotoPicker picker = new PhotoPicker.Builder().setIsDialog(false).setIsShowCamera(false).setMaxPhotoCount(9).setSelectedPhotos(selectedPhotos).builder();
picker.chooseImage(AlbumActivity.this, new OnSelectPhotoListener() {
@Override
public void onSelected(ArrayList<String> selectedPhotoList) {
selectedPhotos.clear();
selectedPhotos.addAll(selectedPhotoList);
setPhotoAdapter();
}
});
}
/**
* 使用仿微信的图片选择组件 注意这种方式需要在onActivityResult获取选择结果
*/
private void openWxPhotoPicker() {
PhotoPicker picker = new PhotoPicker.Builder().setIsDialog(false).setIsShowCamera(false).setMaxPhotoCount(9).setSelectedPhotos(selectedPhotos).builder();
picker.chooseImage(AlbumActivity.this, WxChoosePhotoActivity.clreplaced);
}
public static void enter(Context context, int imageLoaderType) {
Intent intent = new Intent(context, AlbumActivity.clreplaced);
intent.putExtra("type", imageLoaderType);
context.startActivity(intent);
}
private void setPhotoAdapter() {
if (photoAdapter == null) {
final int itemSize = (DisplayUtil.getScreenWidth() - DisplayUtil.dpToPx(72)) / 3;
final ViewGroup.LayoutParams params = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, itemSize);
photoAdapter = new BaseAdapter() {
@Override
public int getCount() {
return selectedPhotos.size();
}
@Override
public Object gereplacedem(int position) {
return selectedPhotos.get(position);
}
@Override
public long gereplacedemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
WrapImageView imageView = new WrapImageView(AlbumActivity.this);
imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
ImageLoaderManager.getInstance().displayImage("file://" + gereplacedem(position), imageView, itemSize, itemSize);
imageView.setLayoutParams(params);
return imageView;
}
};
photoGrid.setAdapter(photoAdapter);
} else {
photoAdapter.notifyDataSetChanged();
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode != PhotoPicker.REQUEST_CODE_CHOOSE_PHOTO || data == null) {
return;
}
List<String> photoList = data.getStringArrayListExtra(PhotoPicker.SELECTED_PHOTOS);
if (photoList != null && photoList.size() > 0) {
selectedPhotos.clear();
selectedPhotos.addAll(photoList);
setPhotoAdapter();
}
}
@Override
protected void onDestroy() {
super.onDestroy();
ImageLoaderManager.getInstance().onDestroy();
}
}
18
Source : HintAdapterTest.java
with Apache License 2.0
from james602152002
with Apache License 2.0
from james602152002
@Before
public void setUp() throws Exception {
BaseAdapter baseAdapter = new BaseAdapter() {
@Override
public int getCount() {
return 0;
}
@Override
public Object gereplacedem(int position) {
return null;
}
@Override
public long gereplacedemId(int position) {
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
return null;
}
};
spinner = new FloatingLabelSpinner(InstrumentationRegistry.getInstrumentation().getTargetContext());
spinner.setAdapter(baseAdapter);
spinner.setHint("hint");
adapter = (HintAdapter) spinner.getAdapter();
}
18
Source : SwipeRefreshLayoutActivity.java
with MIT License
from GitLqr
with MIT License
from GitLqr
public clreplaced SwipeRefreshLayoutActivity extends AppCompatActivity {
private SwipeRefreshLayout mSrl;
private ListView mListView;
private int number = 0;
private List<String> mData = new ArrayList<>();
private BaseAdapter mAdapter;
private Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
mAdapter.notifyDataSetChanged();
mSrl.setRefreshing(false);
}
};
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_swipe_refresh_layout);
mSrl = (SwipeRefreshLayout) findViewById(R.id.srl);
mListView = (ListView) findViewById(R.id.lv);
setSwipeRefreshLayout();
setListView();
}
private void setSwipeRefreshLayout() {
// 设置 SwipeRefreshLayout 的尺寸
mSrl.setSize(SwipeRefreshLayout.LARGE);
// 设置 SwipeRefreshLayout 刷新时的颜色切换(可以有无数种)
mSrl.setColorSchemeColors(Color.RED, Color.YELLOW, Color.GREEN);
// 设置 SwipeRefreshLayout 的背景色
mSrl.setBackgroundColor(Color.GRAY);
// 设置 SwipeRefreshLayout 的下拉距离
mSrl.setDistanceToTriggerSync(100);
// 设置 SwipeRefreshLayout 正在刷新监听
mSrl.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
for (int i = 0; i < 10; i++) {
mData.add(0, (++number) + "");
}
mHandler.postDelayed(new Runnable() {
@Override
public void run() {
mHandler.sendEmptyMessage(0);
}
}, 3000);
}
});
}
private void setListView() {
mAdapter = new BaseAdapter() {
@Override
public int getCount() {
return mData.size();
}
@Override
public String gereplacedem(int position) {
return mData.get(position);
}
@Override
public long gereplacedemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
TextView tv = new TextView(parent.getContext());
AbsListView.LayoutParams params = new AbsListView.LayoutParams(AbsListView.LayoutParams.MATCH_PARENT, 100);
tv.setLayoutParams(params);
tv.setBackgroundColor(Color.WHITE);
tv.setText(gereplacedem(position));
tv.setGravity(Gravity.CENTER);
return tv;
}
};
mListView.setAdapter(mAdapter);
}
}
18
Source : ExfriendListActivity.java
with GNU Affero General Public License v3.0
from ferredoxin
with GNU Affero General Public License v3.0
from ferredoxin
@SuppressLint("Registered")
public clreplaced ExfriendListActivity extends IphonereplacedleBarActivityCompat {
private static final int R_ID_EXL_replacedLE = 0x300AFF01;
private static final int R_ID_EXL_SUBreplacedLE = 0x300AFF02;
private static final int R_ID_EXL_FACE = 0x300AFF03;
private static final int R_ID_EXL_STATUS = 0x300AFF04;
private FaceImpl face;
private ExfriendManager exm;
private ArrayList<EventRecord> evs;
private final BaseAdapter adapter = new BaseAdapter() {
@Override
public int getCount() {
return ExfriendListActivity.this.getCount();
}
@Override
public Object gereplacedem(int position) {
return ExfriendListActivity.this.gereplacedem(position);
}
@Override
public long gereplacedemId(int position) {
return ExfriendListActivity.this.gereplacedemId(position);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
return ExfriendListActivity.this.getView(position, convertView, parent);
}
};
@Override
public boolean doOnCreate(Bundle bundle) {
super.doOnCreate(bundle);
try {
face = FaceImpl.getInstance();
} catch (Throwable e) {
log(e);
}
exm = ExfriendManager.getCurrent();
reload();
XListView sdlv = new XListView(this, null);
sdlv.setFocusable(true);
ViewGroup.LayoutParams mmlp = new ViewGroup.LayoutParams(MATCH_PARENT, MATCH_PARENT);
RelativeLayout.LayoutParams mwllp = new RelativeLayout.LayoutParams(MATCH_PARENT, WRAP_CONTENT);
RelativeLayout rl = new RelativeLayout(ExfriendListActivity.this);
rl.setId(R.id.rootMainLayout);
sdlv.setId(R.id.rootMainList);
mwllp.addRule(RelativeLayout.ALIGN_PARENT_TOP);
mwllp.addRule(RelativeLayout.CENTER_VERTICAL);
TextView tv = new TextView(ExfriendListActivity.this);
tv.setGravity(Gravity.CENTER);
tv.setTextColor(ResUtils.skin_gray3);
tv.setTextSize(Utils.dip2sp(ExfriendListActivity.this, 14));
rl.addView(tv, mwllp);
rl.addView(sdlv, mmlp);
setContentView(rl);
setreplacedle("历史好友");
TextView rightBtn = (TextView) getRightTextView();
rightBtn.setVisibility(View.VISIBLE);
rightBtn.setText("高级");
rightBtn.setEnabled(true);
rightBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
try {
} catch (Throwable e) {
log(e);
}
}
});
sdlv.setDivider(null);
long uin = Utils.getLongAccountUin();
ExfriendManager exm = ExfriendManager.get(uin);
exm.clearUnreadFlag();
tv.setText("最后更新: " + getRelTimeStrSec(exm.lastUpdateTimeSec) + "\n长按列表可删除");
ViewBuilder.listView_setAdapter(sdlv, adapter);
setContentBackgroundDrawable(ResUtils.skin_background);
ExfriendListActivity.this.getWindow().getDecorView().setTag(this);
return true;
}
public void reload() {
ConcurrentHashMap<Integer, EventRecord> eventsMap = exm.getEvents();
if (evs == null) {
evs = new ArrayList<>();
} else {
evs.clear();
}
if (eventsMap == null) {
return;
}
Iterator<Map.Entry<Integer, EventRecord>> it = eventsMap.entrySet().iterator();
EventRecord ev;
while (it.hasNext()) {
ev = it.next().getValue();
evs.add(ev);
}
Collections.sort(evs);
}
public int getCount() {
return evs.size();
}
public Object gereplacedem(int position) {
return null;
}
public long gereplacedemId(int position) {
return 0;
}
public View getView(int position, View convertView, ViewGroup parent) {
EventRecord ev = evs.get(position);
if (convertView == null) {
// tv;
convertView = inflateItemView(ev);
}
convertView.setTag(ev);
TextView replacedle = convertView.findViewById(R_ID_EXL_replacedLE);
replacedle.setText(ev.getShowStr());
boolean isfri = false;
TextView stat = convertView.findViewById(R_ID_EXL_STATUS);
try {
if (exm.getPersons().get(ev.operand).friendStatus == FriendRecord.STATUS_FRIEND_MUTUAL) {
isfri = true;
}
} catch (Exception e) {
}
if (isfri) {
stat.setTextColor(ResUtils.cloneColor(ResUtils.skin_gray3));
stat.setText("已恢复");
} else {
stat.setTextColor(ResUtils.cloneColor(ResUtils.skin_red));
stat.setText("已删除");
}
TextView subreplacedle = convertView.findViewById(R_ID_EXL_SUBreplacedLE);
subreplacedle.setText(getIntervalDspMs(ev.timeRangeBegin * 1000, ev.timeRangeEnd * 1000));
ImageView imgview = convertView.findViewById(R_ID_EXL_FACE);
Bitmap bm = face.getBitmapFromCache(FaceImpl.TYPE_USER, "" + ev.operand);
if (bm == null) {
imgview.setImageDrawable(ResUtils.loadDrawableFromreplacedet("face.png", ExfriendListActivity.this));
face.registerView(FaceImpl.TYPE_USER, "" + ev.operand, imgview);
} else {
imgview.setImageBitmap(bm);
}
return convertView;
}
@TargetApi(Build.VERSION_CODES.JELLY_BEAN)
private View inflateItemView(EventRecord ev) {
int tmp;
RelativeLayout rlayout = new RelativeLayout(ExfriendListActivity.this);
LinearLayout llayout = new LinearLayout(ExfriendListActivity.this);
llayout.setGravity(Gravity.CENTER_VERTICAL);
llayout.setOrientation(LinearLayout.HORIZONTAL);
LinearLayout textlayout = new LinearLayout(ExfriendListActivity.this);
textlayout.setOrientation(LinearLayout.VERTICAL);
rlayout.setBackground(ResUtils.getLisreplacedemBackground());
LinearLayout.LayoutParams imglp = new LinearLayout.LayoutParams(Utils.dip2px(ExfriendListActivity.this, 50), Utils.dip2px(ExfriendListActivity.this, 50));
imglp.setMargins(tmp = Utils.dip2px(ExfriendListActivity.this, 6), tmp, tmp, tmp);
ImageView imgview = new ImageView(ExfriendListActivity.this);
imgview.setFocusable(false);
imgview.setClickable(false);
imgview.setId(R_ID_EXL_FACE);
imgview.setScaleType(ImageView.ScaleType.FIT_XY);
llayout.addView(imgview, imglp);
LinearLayout.LayoutParams ltxtlp = new LinearLayout.LayoutParams(MATCH_PARENT, WRAP_CONTENT);
LinearLayout.LayoutParams textlp = new LinearLayout.LayoutParams(MATCH_PARENT, WRAP_CONTENT);
ltxtlp.setMargins(tmp = Utils.dip2px(ExfriendListActivity.this, 2), tmp, tmp, tmp);
textlp.setMargins(tmp = Utils.dip2px(ExfriendListActivity.this, 1), tmp, tmp, tmp);
llayout.addView(textlayout, ltxtlp);
TextView replacedle = new TextView(ExfriendListActivity.this);
replacedle.setId(R_ID_EXL_replacedLE);
replacedle.setSingleLine();
replacedle.setGravity(Gravity.CENTER_VERTICAL);
replacedle.setTextColor(ResUtils.cloneColor(ResUtils.skin_black));
replacedle.setTextSize(Utils.px2sp(ExfriendListActivity.this, Utils.dip2px(ExfriendListActivity.this, 16)));
TextView subreplacedle = new TextView(ExfriendListActivity.this);
subreplacedle.setId(R_ID_EXL_SUBreplacedLE);
subreplacedle.setSingleLine();
subreplacedle.setGravity(Gravity.CENTER_VERTICAL);
subreplacedle.setTextColor(ResUtils.cloneColor(ResUtils.skin_gray3));
subreplacedle.setTextSize(Utils.px2sp(ExfriendListActivity.this, Utils.dip2px(ExfriendListActivity.this, 14)));
textlayout.addView(replacedle, textlp);
textlayout.addView(subreplacedle, textlp);
RelativeLayout.LayoutParams statlp = new RelativeLayout.LayoutParams(WRAP_CONTENT, WRAP_CONTENT);
TextView stat = new TextView(ExfriendListActivity.this);
stat.setId(R_ID_EXL_STATUS);
stat.setSingleLine();
stat.setGravity(Gravity.CENTER);
stat.setTextSize(Utils.px2sp(ExfriendListActivity.this, Utils.dip2px(ExfriendListActivity.this, 16)));
statlp.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
statlp.addRule(RelativeLayout.CENTER_VERTICAL);
statlp.rightMargin = Utils.dip2px(ExfriendListActivity.this, 16);
rlayout.addView(llayout);
rlayout.addView(stat, statlp);
rlayout.setClickable(true);
rlayout.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
long uin = ((EventRecord) v.getTag()).operand;
MainHook.openProfileCard(v.getContext(), uin);
}
});
rlayout.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(final View v) {
try {
CustomDialog dialog = CustomDialog.create(ExfriendListActivity.this);
dialog.setreplacedle("删除记录");
dialog.setMessage("确认删除历史记录(" + ((EventRecord) v.getTag())._remark + ")");
dialog.setPositiveButton("确认", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
exm.getEvents().values().remove(v.getTag());
exm.saveConfigure();
reload();
adapter.notifyDataSetChanged();
}
});
dialog.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
dialog.show();
} catch (Exception e) {
log(e);
}
return true;
}
});
return rlayout;
}
}
18
Source : BannerPageView.java
with Apache License 2.0
from chengkun123
with Apache License 2.0
from chengkun123
/**
* Created by Lenovo.
*/
public clreplaced BannerPageView extends ViewPager {
private final static String TAG = "BannerPageView";
private BaseAdapter mAdapter;
// 发送消息的message
private final int SCROLL_MSG = 0x0011;
// 页面切换间隔时间
private int mCountDownTime = 4000;
private BannerScroller mScroller;
// 复用销毁的界面
private List<View> mConvertViews;
private Activity mActivity;
private Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
// Log.e(TAG, "mHandler新建了");
setCurrenreplacedem(getCurrenreplacedem() + 1);
startRoll();
}
};
public BannerPageView(Context context) {
this(context, null);
}
public BannerPageView(Context context, AttributeSet attrs) {
super(context, attrs);
mActivity = (Activity) context;
mScroller = new BannerScroller(context);
try {
Field field = ViewPager.clreplaced.getDeclaredField("mScroller");
// 因为是私有变量
field.setAccessible(true);
// 第一个参数代表当前属性在哪个类,第二个参数代表参数要设置的值
field.set(this, mScroller);
} catch (NoSuchFieldException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
mConvertViews = new ArrayList<>();
}
public void setAdapter(BaseAdapter adapter) {
setAdapter(new BannerPagerAdapter());
mAdapter = adapter;
// 监听Activity生命周期
mActivity.getApplication().registerActivityLifecycleCallbacks(mActivityCallbacks);
}
public void startRoll() {
// Log.e(TAG, "startRoll");
mHandler.sendEmptyMessageDelayed(SCROLL_MSG, mCountDownTime);
// resetRoll();
}
public void setScrollerDuaration(int duaration) {
mScroller.setScrollerDuaration(duaration);
resetRoll();
}
public void setScrollerCountDown(int countDown) {
mCountDownTime = countDown;
resetRoll();
}
public void resetRoll() {
mHandler.removeMessages(SCROLL_MSG);
mHandler.sendEmptyMessageDelayed(SCROLL_MSG, mCountDownTime);
}
private clreplaced BannerPagerAdapter extends PagerAdapter {
@Override
public int getCount() {
return Integer.MAX_VALUE;
}
@Override
public boolean isViewFromObject(View view, Object object) {
return view == object;
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
View bannerItemView = mAdapter.getView(position % mAdapter.getCount(), getConvertView(position), container);
container.addView(bannerItemView);
return bannerItemView;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView((View) object);
if (!mConvertViews.contains((View) object)) {
mConvertViews.add((View) object);
}
}
}
private View getConvertView(int position) {
int size = mConvertViews.size();
// Log.e("mConvertViews", "mConvertViews size:" + mConvertViews.size());
for (int i = 0; i < size; i++) {
if (mConvertViews.get(i).getParent() == null) {
return mConvertViews.get(i);
}
}
return null;
}
/*
* 防止内存泄漏
* */
@Override
protected void onDetachedFromWindow() {
/*Log.e(TAG, "onDetachedFromWindow");
if(mHandler != null){
mHandler.removeMessages(SCROLL_MSG);
mHandler = null;
}
if(mActivity != null){
mActivity.getApplication().unregisterActivityLifecycleCallbacks(mActivityCallbacks);
}*/
super.onDetachedFromWindow();
}
/*
* Activity没有显示的时候逻辑上是不需要进行切换的
*
* */
private Application.ActivityLifecycleCallbacks mActivityCallbacks = new SimpleActivityCallbacks() {
@Override
public void onActivityResumed(Activity activity) {
super.onActivityResumed(activity);
Log.e(TAG, "onActivityResumed");
if (activity == mActivity) {
mHandler.sendEmptyMessageDelayed(mCountDownTime, SCROLL_MSG);
}
}
@Override
public void onActivityPaused(Activity activity) {
super.onActivityPaused(activity);
if (activity == mActivity) {
mHandler.removeMessages(SCROLL_MSG);
}
}
};
}
18
Source : ChooseCartridgeDialog.java
with GNU General Public License v3.0
from cgeo
with GNU General Public License v3.0
from cgeo
public clreplaced ChooseCartridgeDialog extends CustomDialogFragment {
private static final String TAG = "ChooseCartridgeDialog";
private ArrayList<DataInfo> data;
private BaseAdapter adapter;
private Vector<CartridgeFile> cartridgeFiles;
public ChooseCartridgeDialog() {
super();
}
@Override
public Dialog createDialog(Bundle savedInstanceState) {
if (A.getMain() == null || cartridgeFiles == null) {
return null;
}
try {
// sort cartridges
final Location actLoc = LocationState.getLocation();
final Location loc1 = new Location(TAG);
final Location loc2 = new Location(TAG);
Collections.sort(cartridgeFiles, (object1, object2) -> {
loc1.setLareplacedude(object1.lareplacedude);
loc1.setLongitude(object1.longitude);
loc2.setLareplacedude(object2.lareplacedude);
loc2.setLongitude(object2.longitude);
return (int) (actLoc.distanceTo(loc1) - actLoc.distanceTo(loc2));
});
// prepare list
data = new ArrayList<>();
for (int i = 0; i < cartridgeFiles.size(); i++) {
CartridgeFile file = cartridgeFiles.get(i);
byte[] iconData = file.getFile(file.iconId);
Bitmap icon;
try {
icon = BitmapFactory.decodeByteArray(iconData, 0, iconData.length);
} catch (Exception e) {
icon = Images.getImageB(R.drawable.icon_gc_wherigo);
}
DataInfo di = new DataInfo(file.name, file.type + ", " + file.author + ", " + file.version, icon);
di.value01 = file.lareplacedude;
di.value02 = file.longitude;
di.setDistAzi(actLoc);
data.add(di);
}
// create listView
ListView listView = UtilsGUI.createListView(getActivity(), false, data);
// set click listener
listView.setOnItemClickListener((parent, view, position, id) -> itemClicked(position));
// set on long click listener for file deletion
listView.setOnItemLongClickListener((parent, view, position, id) -> {
itemLongClicked(position);
return true;
});
adapter = (BaseAdapter) listView.getAdapter();
// construct dialog
return new AlertDialog.Builder(getActivity()).setreplacedle(R.string.choose_cartridge).setIcon(R.drawable.ic_replacedle_logo).setView(listView).setNeutralButton(R.string.close, null).create();
} catch (Exception e) {
Logger.e(TAG, "createDialog()", e);
}
return null;
}
private void itemClicked(int position) {
try {
MainActivity.openCartridge(cartridgeFiles.get(position));
} catch (Exception e) {
Logger.e(TAG, "onCreate()", e);
}
dismiss();
}
private void itemLongClicked(final int position) {
try {
final CartridgeFile cartridgeFile = cartridgeFiles.get(position);
final String filename = cartridgeFile.filename.substring(0, cartridgeFile.filename.length() - 3);
UtilsGUI.showDialogQuestion(getActivity(), R.string.delete_cartridge, (dialog, btn) -> {
File[] files = FileSystem.getFiles2(new File(cartridgeFile.filename).getParent(), pathname -> pathname.getAbsolutePath().startsWith(filename));
for (File file : files) {
file.delete();
}
MainActivity.refreshCartridges();
cartridgeFiles.remove(position);
data.remove(position);
if (adapter != null)
adapter.notifyDataSetChanged();
}, null);
} catch (Exception e) {
Logger.e(TAG, "onCreate()", e);
}
}
public void setParams(Vector<CartridgeFile> cartridgeFiles) {
this.cartridgeFiles = cartridgeFiles;
}
}
18
Source : InfiniteCardView.java
with Apache License 2.0
from BakerJQ
with Apache License 2.0
from BakerJQ
/**
* set view adapter
*
* @param adapter adapter
*/
public void setAdapter(BaseAdapter adapter) {
this.mAdapter = adapter;
mAdapter.registerDataSetObserver(new DataSetObserver() {
@Override
public void onChanged() {
mAnimationHelper.notifyDataSetChanged(mAdapter);
}
});
mAnimationHelper.initAdapterView(adapter, true);
}
18
Source : VoicePlayClickListener.java
with MIT License
from AnyPeer
with MIT License
from AnyPeer
public clreplaced VoicePlayClickListener implements View.OnClickListener {
private ChatMessage message;
private String filePath;
private ImageView voiceIconView;
private AnimationDrawable voiceAnimation = null;
MediaPlayer mediaPlayer = null;
Activity activity;
private BaseAdapter adapter;
public static boolean isPlaying = false;
public static VoicePlayClickListener currentPlayListener = null;
VoicePlayClickListener(ChatMessage message, ImageView v, BaseAdapter adapter, Activity activity) {
this.message = message;
filePath = message.getFilePath();
this.adapter = adapter;
voiceIconView = v;
this.activity = activity;
}
void stopPlayVoice() {
voiceAnimation.stop();
if (ChatMessage.Direct.getMsgDirect(message.getDirect()) == ChatMessage.Direct.RECEIVE) {
voiceIconView.setImageResource(R.drawable.chatfrom_voice_playing);
} else {
voiceIconView.setImageResource(R.drawable.chatto_voice_playing);
}
// stop play voice
if (mediaPlayer != null) {
mediaPlayer.stop();
mediaPlayer.release();
}
isPlaying = false;
((ChatActivity) activity).playMsgId = null;
adapter.notifyDataSetChanged();
}
void playVoice(String filePath) {
if (!(new File(filePath).exists())) {
return;
}
((ChatActivity) activity).playMsgId = message.getMsgId();
AudioManager audioManager = (AudioManager) activity.getSystemService(Context.AUDIO_SERVICE);
mediaPlayer = new MediaPlayer();
// if (EMChatManager.getInstance().getChatOptions().getUseSpeaker()) {
audioManager.setMode(AudioManager.MODE_NORMAL);
audioManager.setSpeakerphoneOn(true);
mediaPlayer.setAudioStreamType(AudioManager.STREAM_RING);
// } else {
// audioManager.setSpeakerphoneOn(false);// 关闭扬声器
// // 把声音设定成Earpiece(听筒)出来,设定为正在通话中
// audioManager.setMode(AudioManager.MODE_IN_CALL);
// mediaPlayer.setAudioStreamType(AudioManager.STREAM_VOICE_CALL);
// }
try {
mediaPlayer.setDataSource(filePath);
mediaPlayer.prepare();
mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
mediaPlayer.release();
mediaPlayer = null;
// stop animation
stopPlayVoice();
}
});
isPlaying = true;
currentPlayListener = this;
mediaPlayer.start();
showAnimation();
} catch (Exception e) {
}
}
// show the voice playing animation
private void showAnimation() {
// play voice, and start animation
if (ChatMessage.Direct.getMsgDirect(message.getDirect()) == ChatMessage.Direct.RECEIVE) {
voiceIconView.setImageResource(R.drawable.voice_from_icon);
} else {
voiceIconView.setImageResource(R.drawable.voice_to_icon);
}
voiceAnimation = (AnimationDrawable) voiceIconView.getDrawable();
voiceAnimation.start();
}
@Override
public void onClick(View v) {
// String st = activity.getResources().getString(R.string.Is_download_voice_click_later);
if (isPlaying) {
if (((ChatActivity) activity).playMsgId != null && ((ChatActivity) activity).playMsgId.equals(message.getMsgId())) {
currentPlayListener.stopPlayVoice();
return;
}
currentPlayListener.stopPlayVoice();
}
playVoice(filePath);
}
}
18
Source : ActionSheetDialog.java
with MIT License
from AndroidPureLand
with MIT License
from AndroidPureLand
/**
* Dialog like iOS ActionSheet(iOS风格对话框)
*/
public clreplaced ActionSheetDialog extends BottomBaseDialog<ActionSheetDialog> {
/**
* ListView
*/
private ListView mLv;
/**
* replacedle
*/
private TextView mTvreplacedle;
/**
* replacedle underline(标题下划线)
*/
private View mVLinereplacedle;
/**
* mCancel button(取消按钮)
*/
private TextView mTvCancel;
/**
* corner radius,dp(圆角程度,单位dp)
*/
private float mCornerRadius = 5;
/**
* replacedle background color(标题背景颜色)
*/
private int mreplacedleBgColor = Color.parseColor("#ddffffff");
/**
* replacedle text(标题)
*/
private String mreplacedle = "提示";
/**
* replacedle height(标题栏高度)
*/
private float mreplacedleHeight = 48;
/**
* replacedle textcolor(标题颜色)
*/
private int mreplacedleTextColor = Color.parseColor("#8F8F8F");
/**
* replacedle textsize(标题字体大小,单位sp)
*/
private float mreplacedleTextSize = 17.5f;
/**
* ListView background color(ListView背景色)
*/
private int mLvBgColor = Color.parseColor("#ddffffff");
/**
* ListView background color(ListView背景色)
*/
private int mCancelBgColor = Color.parseColor("#e83e41");
/**
* divider color(ListView divider颜色)
*/
private int mDividerColor = Color.parseColor("#D7D7D9");
/**
* divider height(ListView divider高度)
*/
private float mDividerHeight = 0.8f;
/**
* item press color(ListView item按住颜色)
*/
private int mItemPressColor = Color.parseColor("#ffcccccc");
/**
* item textcolor(ListView item文字颜色)
*/
private int mItemTextColor = Color.parseColor("#44A2FF");
/**
* item textsize(ListView item文字大小)
*/
private float mItemTextSize = 17.5f;
/**
* item height(ListView item高度)
*/
private float mItemHeight = 48;
/**
* enable replacedle show(是否显示标题)
*/
private boolean mIsreplacedleShow = true;
/**
* cancel btn text(取消按钮内容)
*/
private String mCancelText = "取消";
/**
* cancel btn text color(取消按钮文字颜色)
*/
private int mCancelTextColor = Color.parseColor("#44A2FF");
/**
* cancel btn text size(取消按钮文字大小)
*/
private float mCancelTextSize = 17.5f;
/**
* adapter(自定义适配器)
*/
private BaseAdapter mAdapter;
/**
* operation items(操作items)
*/
private ArrayList<DialogMenuItem> mContents = new ArrayList<>();
private OnOperItemClickL mOnOperItemClickL;
private LayoutAnimationController mLac;
public void setOnOperItemClickL(OnOperItemClickL onOperItemClickL) {
mOnOperItemClickL = onOperItemClickL;
}
public ActionSheetDialog(Context context, ArrayList<DialogMenuItem> baseItems, View animateView) {
super(context, animateView);
mContents.addAll(baseItems);
init();
}
public ActionSheetDialog(Context context, String[] items, View animateView) {
super(context, animateView);
mContents = new ArrayList<>();
for (String item : items) {
DialogMenuItem customBaseItem = new DialogMenuItem(item, 0);
mContents.add(customBaseItem);
}
init();
}
public ActionSheetDialog(Context context, BaseAdapter adapter, View animateView) {
super(context, animateView);
mAdapter = adapter;
init();
}
private void init() {
widthScale(0.95f);
/**
* LayoutAnimation
*/
TranslateAnimation animation = new TranslateAnimation(Animation.RELATIVE_TO_SELF, 0f, Animation.RELATIVE_TO_SELF, 0f, Animation.RELATIVE_TO_SELF, 6f, Animation.RELATIVE_TO_SELF, 0);
animation.setInterpolator(new DecelerateInterpolator());
animation.setDuration(350);
animation.setStartOffset(150);
mLac = new LayoutAnimationController(animation, 0.12f);
mLac.setInterpolator(new DecelerateInterpolator());
}
@Override
public View onCreateView() {
LinearLayout ll_container = new LinearLayout(mContext);
ll_container.setOrientation(LinearLayout.VERTICAL);
ll_container.setBackgroundColor(Color.TRANSPARENT);
/**
* replacedle
*/
mTvreplacedle = new TextView(mContext);
mTvreplacedle.setGravity(Gravity.CENTER);
mTvreplacedle.setPadding(dp2px(10), dp2px(5), dp2px(10), dp2px(5));
LayoutParams params = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
params.topMargin = dp2px(20);
ll_container.addView(mTvreplacedle, params);
/**
* replacedle underline
*/
mVLinereplacedle = new View(mContext);
ll_container.addView(mVLinereplacedle);
/**
* listview
*/
mLv = new ListView(mContext);
mLv.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT, 1));
mLv.setCacheColorHint(Color.TRANSPARENT);
mLv.setFadingEdgeLength(0);
mLv.setVerticalScrollBarEnabled(false);
mLv.setSelector(new ColorDrawable(Color.TRANSPARENT));
ll_container.addView(mLv);
/**
* mCancel btn
*/
mTvCancel = new TextView(mContext);
mTvCancel.setGravity(Gravity.CENTER);
LayoutParams lp = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
lp.topMargin = dp2px(7);
lp.bottomMargin = dp2px(7);
mTvCancel.setLayoutParams(lp);
ll_container.addView(mTvCancel);
return ll_container;
}
@Override
public void setUiBeforShow() {
/**
* replacedle
*/
float radius = dp2px(mCornerRadius);
mTvreplacedle.setHeight(dp2px(mreplacedleHeight));
mTvreplacedle.setBackgroundDrawable(CornerUtils.cornerDrawable(mreplacedleBgColor, new float[] { radius, radius, radius, radius, 0, 0, 0, 0 }));
mTvreplacedle.setText(mreplacedle);
mTvreplacedle.setTextSize(TypedValue.COMPLEX_UNIT_SP, mreplacedleTextSize);
mTvreplacedle.setTextColor(mreplacedleTextColor);
mTvreplacedle.setVisibility(mIsreplacedleShow ? View.VISIBLE : View.GONE);
/**
* replacedle underline
*/
mVLinereplacedle.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, dp2px(mDividerHeight)));
mVLinereplacedle.setBackgroundColor(mDividerColor);
mVLinereplacedle.setVisibility(mIsreplacedleShow ? View.VISIBLE : View.GONE);
/**
* mCancel btn
*/
mTvCancel.setHeight(dp2px(mItemHeight));
mTvCancel.setText(mCancelText);
mTvCancel.setTextSize(TypedValue.COMPLEX_UNIT_SP, mCancelTextSize);
mTvCancel.setTextColor(mCancelTextColor);
mTvCancel.setBackgroundDrawable(CornerUtils.lisreplacedemSelector(radius, mCancelBgColor, mItemPressColor, 1, 0));
mTvCancel.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dismiss();
}
});
/**
* listview
*/
mLv.setDivider(new ColorDrawable(mDividerColor));
mLv.setDividerHeight(dp2px(mDividerHeight));
if (mIsreplacedleShow) {
mLv.setBackgroundDrawable(CornerUtils.cornerDrawable(mLvBgColor, new float[] { 0, 0, 0, 0, radius, radius, radius, radius }));
} else {
mLv.setBackgroundDrawable(CornerUtils.cornerDrawable(mLvBgColor, radius));
}
if (mAdapter == null) {
mAdapter = new ListDialogAdapter();
}
mLv.setAdapter(mAdapter);
mLv.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
if (mOnOperItemClickL != null) {
mOnOperItemClickL.onOperItemClick(parent, view, position, id);
}
}
});
mLv.setLayoutAnimation(mLac);
}
/**
* set replacedle background color(设置标题栏背景色)
*/
public ActionSheetDialog replacedleBgColor(int replacedleBgColor) {
mreplacedleBgColor = replacedleBgColor;
return this;
}
/**
* set replacedle text(设置标题内容)
*/
public ActionSheetDialog replacedle(String replacedle) {
mreplacedle = replacedle;
return this;
}
/**
* set replacedleHeight(设置标题高度)
*/
public ActionSheetDialog replacedleHeight(float replacedleHeight) {
mreplacedleHeight = replacedleHeight;
return this;
}
/**
* set replacedle textsize(设置标题字体大小)
*/
public ActionSheetDialog replacedleTextSize_SP(float replacedleTextSize_SP) {
mreplacedleTextSize = replacedleTextSize_SP;
return this;
}
/**
* set replacedle textcolor(设置标题字体颜色)
*/
public ActionSheetDialog replacedleTextColor(int replacedleTextColor) {
mreplacedleTextColor = replacedleTextColor;
return this;
}
/**
* enable replacedle show(设置标题是否显示)
*/
public ActionSheetDialog isreplacedleShow(boolean isreplacedleShow) {
mIsreplacedleShow = isreplacedleShow;
return this;
}
/**
* set ListView background color(设置ListView背景)
*/
public ActionSheetDialog lvBgColor(int lvBgColor) {
mLvBgColor = lvBgColor;
return this;
}
/**
* set corner radius(设置圆角程度,单位dp)
*/
public ActionSheetDialog cornerRadius(float cornerRadius_DP) {
mCornerRadius = cornerRadius_DP;
return this;
}
/**
* set divider color(ListView divider颜色)
*/
public ActionSheetDialog dividerColor(int dividerColor) {
mDividerColor = dividerColor;
return this;
}
/**
* set divider height(ListView divider高度)
*/
public ActionSheetDialog dividerHeight(float dividerHeight_DP) {
mDividerHeight = dividerHeight_DP;
return this;
}
/**
* set item press color(item按住颜色)
*/
public ActionSheetDialog itemPressColor(int itemPressColor) {
mItemPressColor = itemPressColor;
return this;
}
/**
* set item textcolor(item字体颜色)* @return ActionSheetDialog
*/
public ActionSheetDialog itemTextColor(int itemTextColor) {
mItemTextColor = itemTextColor;
return this;
}
/**
* set item textsize(item字体大小)
*/
public ActionSheetDialog itemTextSize(float itemTextSize_SP) {
mItemTextSize = itemTextSize_SP;
return this;
}
/**
* set item height(item高度)
*/
public ActionSheetDialog itemHeight(float itemHeight_DP) {
mItemHeight = itemHeight_DP;
return this;
}
/**
* 取消按钮背景
* @param mCancelBgColor
* @return
*/
public ActionSheetDialog setmCancelBgColor(int mCancelBgColor) {
this.mCancelBgColor = mCancelBgColor;
return this;
}
/**
* set layoutAnimation(设置layout动画 ,传入null将不显示layout动画)
*/
public ActionSheetDialog layoutAnimation(LayoutAnimationController lac) {
mLac = lac;
return this;
}
/**
* set cancel btn text(设置取消按钮内容)
*/
public ActionSheetDialog cancelText(String cancelText) {
mCancelText = cancelText;
return this;
}
/**
* cancel btn text color(取消按钮文字颜色)
*/
public ActionSheetDialog cancelText(int cancelTextColor) {
mCancelTextColor = cancelTextColor;
return this;
}
/**
* cancel btn text size(取消按钮文字大小)
*/
public ActionSheetDialog cancelTextSize(float cancelTextSize) {
mCancelTextSize = cancelTextSize;
return this;
}
clreplaced ListDialogAdapter extends BaseAdapter {
@Override
public int getCount() {
return mContents.size();
}
@Override
public Object gereplacedem(int position) {
return null;
}
@Override
public long gereplacedemId(int position) {
return position;
}
@SuppressWarnings("deprecation")
@Override
public View getView(int position, View convertView, ViewGroup parent) {
final DialogMenuItem item = mContents.get(position);
LinearLayout llItem = new LinearLayout(mContext);
llItem.setOrientation(LinearLayout.HORIZONTAL);
llItem.setGravity(Gravity.CENTER_VERTICAL);
ImageView ivItem = new ImageView(mContext);
ivItem.setPadding(0, 0, dp2px(15), 0);
llItem.addView(ivItem);
TextView tvItem = new TextView(mContext);
tvItem.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));
tvItem.setSingleLine(true);
tvItem.setGravity(Gravity.CENTER);
tvItem.setTextColor(mItemTextColor);
tvItem.setTextSize(TypedValue.COMPLEX_UNIT_SP, mItemTextSize);
tvItem.setHeight(dp2px(mItemHeight));
llItem.addView(tvItem);
float radius = dp2px(mCornerRadius);
if (mIsreplacedleShow) {
llItem.setBackgroundDrawable((CornerUtils.lisreplacedemSelector(radius, Color.TRANSPARENT, mItemPressColor, position == mContents.size() - 1)));
} else {
llItem.setBackgroundDrawable(CornerUtils.lisreplacedemSelector(radius, Color.TRANSPARENT, mItemPressColor, mContents.size(), position));
}
ivItem.setImageResource(item.mResId);
tvItem.setText(item.mOperName);
ivItem.setVisibility(item.mResId == 0 ? View.GONE : View.VISIBLE);
return llItem;
}
}
}
18
Source : DrawerMenuActivityConfiguration.java
with GNU General Public License v3.0
from 5GSD
with GNU General Public License v3.0
from 5GSD
public clreplaced DrawerMenuActivityConfiguration {
private int mMainLayout;
private int mDrawerLayoutId;
private int mLeftDrawerId;
private int[] mActionMenuItemsToHideWhenDrawerOpen;
private List<NavDrawerItem> mNavItems;
private BaseAdapter mBaseAdapter;
private DrawerMenuActivityConfiguration(Builder pBuilder) {
mMainLayout = pBuilder.mMainLayout;
mDrawerLayoutId = pBuilder.mDrawerLayoutId;
mLeftDrawerId = pBuilder.mLeftDrawerId;
mActionMenuItemsToHideWhenDrawerOpen = pBuilder.mActionMenuItemsToHideWhenDrawerOpen;
mNavItems = pBuilder.mNavItems;
mBaseAdapter = pBuilder.mBaseAdapter;
}
public int getMainLayout() {
return mMainLayout;
}
public int getDrawerLayoutId() {
return mDrawerLayoutId;
}
public int getLeftDrawerId() {
return mLeftDrawerId;
}
public int[] getActionMenuItemsToHideWhenDrawerOpen() {
return mActionMenuItemsToHideWhenDrawerOpen;
}
public List<NavDrawerItem> getNavItems() {
return mNavItems;
}
public BaseAdapter getBaseAdapter() {
return mBaseAdapter;
}
public static clreplaced Builder {
private final Context mContext;
private int mMainLayout;
private int mDrawerLayoutId;
private int mLeftDrawerId;
private int[] mActionMenuItemsToHideWhenDrawerOpen;
private List<NavDrawerItem> mNavItems;
private int mDrawerOpenDesc;
private int mDrawerCloseDesc;
private BaseAdapter mBaseAdapter;
public Builder(Context pContext) {
mContext = pContext;
}
public Builder mainLayout(int pMainLayout) {
mMainLayout = pMainLayout;
return this;
}
public Builder drawerLayoutId(int pDrawerLayoutId) {
mDrawerLayoutId = pDrawerLayoutId;
return this;
}
public Builder leftDrawerId(int pLeftDrawerId) {
mLeftDrawerId = pLeftDrawerId;
return this;
}
public Builder drawerOpenDesc(int pDrawerOpenDesc) {
mDrawerOpenDesc = pDrawerOpenDesc;
return this;
}
public Builder drawerCloseDesc(int pDrawerCloseDesc) {
mDrawerCloseDesc = pDrawerCloseDesc;
return this;
}
public DrawerMenuActivityConfiguration build() {
List<NavDrawerItem> menu = new ArrayList<>();
// Section Main
menu.add(DrawerMenuSection.create(DrawerMenu.ID.SECTION_MAIN, mContext.getString(R.string.main)));
// Phone/SIM Details
menu.add(DrawerMenuItem.create(DrawerMenu.ID.MAIN.PHONE_SIM_DETAILS, mContext.getString(R.string.device_info), R.drawable.ic_action_phone, true));
// Cell Information (Neighboring cells etc)
menu.add(DrawerMenuItem.create(DrawerMenu.ID.MAIN.CURRENT_TREAT_LEVEL, mContext.getString(R.string.cell_info_replacedle), R.drawable.cell_tower, true));
// Database Viewer
menu.add(DrawerMenuItem.create(DrawerMenu.ID.MAIN.DB_VIEWER, mContext.getString(R.string.db_viewer), R.drawable.ic_action_storage, true));
// Antenna Map Viewer
menu.add(DrawerMenuItem.create(DrawerMenu.ID.MAIN.ANTENNA_MAP_VIEW, mContext.getString(R.string.map_view), R.drawable.ic_action_map, false));
// menu.add(DrawerMenuItem.create(DrawerMenu.ID.MAIN.AT_COMMAND_INTERFACE, mContext.getString(R.string.at_command_replacedle), R.drawable.ic_action_computer, true)); // AT Command Interface
// Section Settings
menu.add(DrawerMenuSection.create(DrawerMenu.ID.SECTION_DATABASE_SETTINGS, mContext.getString(R.string.database_settings)));
// Backup Database
menu.add(DrawerMenuItem.create(DrawerMenu.ID.DATABASE_SETTINGS.BACKUP_DB, mContext.getString(R.string.backup_database), R.drawable.ic_action_import_export, false));
// Restore Database
menu.add(DrawerMenuItem.create(DrawerMenu.ID.DATABASE_SETTINGS.RESTORE_DB, mContext.getString(R.string.restore_database), R.drawable.ic_action_import_export, false));
// Reset Database
menu.add(DrawerMenuItem.create(DrawerMenu.ID.DATABASE_SETTINGS.RESET_DB, mContext.getString(R.string.clear_database), R.drawable.ic_action_delete_database, false));
// Section Application
menu.add(DrawerMenuSection.create(DrawerMenu.ID.SECTION_APPLICATION, mContext.getString(R.string.application)));
// "Download Local BTS data"
menu.add(DrawerMenuItem.create(DrawerMenu.ID.APPLICATION.DOWNLOAD_LOCAL_BTS_DATA, mContext.getString(R.string.get_opencellid), R.drawable.stat_sys_download_anim0, false));
// menu.add(DrawerMenuItem.create(DrawerMenu.ID.APPLICATION.UPLOAD_LOCAL_BTS_DATA, mContext.getString(R.string.upload_bts), R.drawable.stat_sys_upload_anim0, false)); // "Upload Local BTS data"
// Quit
menu.add(DrawerMenuItem.create(DrawerMenu.ID.APPLICATION.QUIT, mContext.getString(R.string.quit), R.drawable.ic_action_remove, false));
mNavItems = menu;
if (mMainLayout == 0) {
this.mainLayout(R.layout.activity_main);
}
if (mDrawerLayoutId == 0) {
this.drawerLayoutId(R.id.drawer_layout);
}
if (mLeftDrawerId == 0) {
this.leftDrawerId(R.id.left_drawer);
}
if (mDrawerOpenDesc == 0) {
this.drawerOpenDesc(R.string.drawer_open);
}
if (mDrawerCloseDesc == 0) {
this.drawerCloseDesc(R.string.drawer_close);
}
if (mBaseAdapter == null) {
mBaseAdapter = new DrawerMenuAdapter(mContext, R.layout.drawer_item, menu);
}
return new DrawerMenuActivityConfiguration(this);
}
}
}
See More Examples