Toolbar and DialogFragment in android - android

There is any way to add transculent dialog under toolbar in activity?
This is my layout:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<android.support.v7.widget.Toolbar
android:id="#+id/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?colorPrimary"
android:minHeight="?attr/actionBarSize"/>
<WebView
android:id="#+id/sa"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</LinearLayout>
and code for dialog:
public class TransparentProgressDialog extends DialogFragment {
private boolean mDialogCancelable = false;
private boolean mBackButtonPressed = false;
private OnDismissAfterBackPressed mOnDismissAfterBackPressed = null;
public static TransparentProgressDialog getInstance() {
TransparentProgressDialog transparentProgressDialog = new TransparentProgressDialog();
return transparentProgressDialog;
}
public static void dismiss(TransparentProgressDialog dialog) {
if (dialog != null) {
try {
dialog.dismissAllowingStateLoss();
} catch (Exception e) {
try {
dialog.dismiss();
} catch (Exception ex) {
Timber.e(ex, "TransparentProgressDialog dismiss");
}
}
}
}
#Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.setCancelable(mDialogCancelable);
}
#Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
Dialog dialog = new Dialog(getActivity(), android.R.style.Theme_Translucent_NoTitleBar);
dialog.setContentView(R.layout.transparent_progress_bar);
dialog.setOnKeyListener(new DialogInterface.OnKeyListener() {
#Override
public boolean onKey(DialogInterface dialogInterface, int i, KeyEvent keyEvent) {
if (keyEvent.getKeyCode() == KeyEvent.KEYCODE_BACK) {
Timber.d("back button pressed");
mBackButtonPressed = true;
}
return false;
}
});
return dialog;
}
#Override
public void onStart() {
super.onStart();
Window window = getDialog().getWindow();
WindowManager.LayoutParams params = window.getAttributes();
params.dimAmount = 0.7f;
params.flags |= WindowManager.LayoutParams.FLAG_DIM_BEHIND;
window.setAttributes(params);
}
#Override
public void onDismiss(DialogInterface dialog) {
super.onDismiss(dialog);
if (mDialogCancelable && mBackButtonPressed && mOnDismissAfterBackPressed != null) {
mOnDismissAfterBackPressed.backPressed();
}
}
public TransparentProgressDialog setCancelableDialog(boolean cancelable) {
this.mDialogCancelable = cancelable;
return this;
}
public TransparentProgressDialog setOnDismissAfterBackPressed(OnDismissAfterBackPressed onDismissAfterBackPressed) {
this.mOnDismissAfterBackPressed = onDismissAfterBackPressed;
return this;
}
public interface OnDismissAfterBackPressed {
void backPressed();
}
}
this dialog always is over my toolbar. How can I avoid that?

Related

Call an dialog fragment method from Activity to Dialog Fragment

I am showing one dialog fragment (showing progress ) in my activity . Calling rest api methods are in my activity . Based on rest api results , I need to some progress in the dialog fragment . So I need to call a method of dialog fragment from activity . I tried with event bus , (Firing from Activity caught on Dialog Fragment ) - But events are not caught in dialog fragment . Is there any other solution ?
Fragment Code:
public class SyncProgressFragment extends BaseDialogFragment {
#BindView(R.id.layout_cancel)
LinearLayout layoutCancel;
#BindView(R.id.sync_with_master_breadcrumbs)
BreadcrumbsView syncWithMasterBreadCrumbs;
#BindView(R.id.master_breadcrumbs)
BreadcrumbsView masterBreadCrumbs;
#BindView(R.id.tvStep)
AppCompatTextView tvStep;
#BindView(R.id.tv_create_defect_title)
AppCompatTextView tvTitle;
private ThreadBus bus;
private FragmentManager manager;
private GoogleApiHelper googleApiHelper;
private Handler handler;
private Runnable runnable;
private boolean isOld;
private boolean isSync;
//private long requestId;
private BreadcrumbsView breadcrumbsView;
#Override
public void onCreate(#Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
bus = AppController.getInstance().getBus();
bus.register(this);
googleApiHelper = AppController.getInstance().getGoogleApiHelper();
googleApiHelper.reconnect();
if (getArguments() != null) {
Bundle bundle = getArguments();
isOld = bundle.getBoolean(AppConstants.IS_OLD,false);
isSync = bundle.getBoolean(AppConstants.IS_OLD,false);
}
}
#Override
public void onViewCreated(#NonNull View view, #Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
initUI();
}
private void initUI() {
if (isOld && isSync)
tvTitle.setText(getString(R.string.syncing_old_data_with_bo));
else if(!isOld && isSync)
tvTitle.setText(getString(R.string.syncing_data_with_bo));
else {
tvTitle.setText(getString(R.string.downloading_master_data));
}
if(isSync) {
breadcrumbsView = syncWithMasterBreadCrumbs;
syncWithMasterBreadCrumbs.setVisibility(View.VISIBLE);
masterBreadCrumbs.setVisibility(View.GONE);
tvStep.setText(getString(R.string.sending_data));
}
else{
breadcrumbsView = masterBreadCrumbs;
masterBreadCrumbs.setVisibility(View.VISIBLE);
syncWithMasterBreadCrumbs.setVisibility(View.GONE);
tvStep.setText(getString(R.string.getting_master_data));
}
}
private void initValues() {
handler = new Handler();
}
#Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
Dialog dialog = super.onCreateDialog(savedInstanceState);
// request a window without the title
dialog.getWindow().requestFeature(Window.FEATURE_NO_TITLE);
dialog.setCanceledOnTouchOutside(false);
dialog.setCancelable(false);
dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
return dialog;
}
#Nullable
#Override
public View onCreateView(#NonNull LayoutInflater inflater, #Nullable ViewGroup container, #Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_sync_progress, container, false);
ButterKnife.bind(this, view);
initValues();
return view;
}
#Override
public void onStart() {
super.onStart();
}
#Override
public void onResume() {
super.onResume();
}
#Override
public void onPause() {
super.onPause();
}
#Override
public void onStop() {
super.onStop();
}
#Override
public void onDestroy() {
super.onDestroy();
if (bus != null) {
bus.unregister(this);
}
try {
handler.removeCallbacks(runnable);
} catch (Exception e) {
}
}
#Override
public void onDestroyView() {
super.onDestroyView();
}
#Override
public void setCancelable(boolean cancelable) {
super.setCancelable(cancelable);
}
#Override
public void onCancel(DialogInterface dialog) {
super.onCancel(dialog);
}
#Override
public void onDismiss(DialogInterface dialog) {
super.onDismiss(dialog);
try {
handler.removeCallbacks(runnable);
} catch (Exception e) {
}
}
#OnClick({R.id.img_close, R.id.layout_cancel})
public void onViewClicked(View view) {
switch (view.getId()) {
case R.id.layout_cancel:
case R.id.img_close:
dismissAllowingStateLoss();
break;
}
}
#Subscribe
public void onSyncGotResponse(SyncGotResponse syncGotResponse) {
Utilities.log(SyncProgressFragment.class,"onSyncGotResponse",""+syncGotResponse.isSuccess());
if(syncGotResponse.isSuccess()) {
breadcrumbsView.nextStep();
tvStep.setText(getString(R.string.synced_data_with_bo));
}
else
dismissAllowingStateLoss();
}
#Subscribe
public void onMasterGotResponse(MasterGotResponse masterGotResponse) {
Utilities.log(SyncProgressFragment.class,"onMasterGotResponse",""+masterGotResponse.isSuccess());
if(masterGotResponse.isSuccess()) {
tvStep.setText(getString(R.string.downloaded_data_from_bo));
breadcrumbsView.nextStep();
}
else
dismissAllowingStateLoss();
}
}
Activity Code:
#Override
public void dataSyncSuccess(DataSyncResponse dataSyncResponse) {
bus.post(new SyncGotResponse(true));
}
#Override
public void dataSyncFailure(String msg) {
UiUtils.showToast(getContext(), msg);
bus.post(new SyncGotResponse(false));
}
//Calling Rest Api method
if (CheckInternetConnection(getContext())) {
try {
presenter.data_sync();
Bundle bundle = new Bundle();
bundle.putBoolean(AppConstants.IS_OLD,false);
bundle.putBoolean(AppConstants.IS_SYNC,true);
syncProgressFragment.setArguments(bundle);
syncProgressFragment.setCancelable(false);
syncProgressFragment.show(getSupportFragmentManager(), syncProgressFragment.getTag());
} catch (JSONException e) {
e.printStackTrace();
}
} else {
ShowSanckBarShow();
}

Two Recycler views inside nested scroll view

I have a Nested Scroll view and inside this, I have a Linear Layout that includes two recycler views. Now the problem is that the first recycler view is not expanding up to its full extent. i.e. there are 5 items in the first recycler view list but it is only showing the first item if I put wrap content. This should expand up to 5 items because of wrap content but it is not working. If I fixed the height to 200DP or 300dp then it started to show more items up to that height. However, I want to show all the items of the first recycler view and then when I scroll it should start second recycler view items after the first recycler view items end.
My layout is:
<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.NestedScrollView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fillViewport="true">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#color/colorPrimary"
android:layout_marginTop="60dp"
android:orientation="vertical">
<com.sooryen.customview.CustomTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="#dimen/spacing_normal"
android:text="#string/my_booking_latest_booking_lable"
app:font="avenirltstd_medium" />
<include layout="#layout/layout_divider" />
<android.support.v7.widget.RecyclerView
android:id="#+id/rv_ongoing_bookings"
android:visibility="visible"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layoutManager="android.support.v7.widget.LinearLayoutManager" />
<com.sooryen.customview.CustomTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="visible"
android:layout_margin="#dimen/spacing_normal"
android:text="#string/my_booking_past_booking_lable"
app:font="avenirltstd_medium" />
<include layout="#layout/layout_divider" />
<android.support.v7.widget.RecyclerView
android:id="#+id/rv_past_bookings"
android:visibility="visible"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:nestedScrollingEnabled="false"
android:layout_marginBottom="#dimen/spacing_extra_small"
android:scrollbars="none"
app:layoutManager="android.support.v7.widget.LinearLayoutManager" />
<View
android:layout_width="match_parent"
android:layout_height="150dp" />
</LinearLayout>
</android.support.v4.widget.NestedScrollView>
Please Help. Where I did something wrong. I tried so many ways from internet but nothing is working. Here is a screenshot of the this screen
The LABEL latest bookings has 5 items but it is only showing one and not expanding up to 5 items. However the second LABEL Past bookings is working perfectly and showing all items when i scroll up to end.
My java file is:
public class MyBookingActivity extends BaseToolBarActivity implements
SwipeRefreshLayout.OnRefreshListener {
int cancelValue;
private SwipeRefreshLayout swipeRefreshLayout;
#BindView(R.id.rv_ongoing_bookings)
RecyclerView mRVOngoingBookings;
private List<MyBookingsApi.ApiResponse.Datum> mCourtDataList = new ArrayList<>();
#BindView(R.id.rv_past_bookings)
RecyclerView mRVPastBookings;
private BaseRecyclerAdapter<MyBookingsApi.ApiResponse.Datum, MyBookingsViewHolder> mBaseRecyclerAdapterMyBookings = new BaseRecyclerAdapter<MyBookingsApi.ApiResponse.Datum, MyBookingsViewHolder>(MyBookingsViewHolder.class, R.layout.layout_list_item_my_bookings) {
#Override
protected void populateViewHolder(MyBookingsViewHolder itemViewHolder, final MyBookingsApi.ApiResponse.Datum model, int position) {
String date = null;
try {
date = new SimpleDateFormat("yyyy/MM/dd", Locale.ENGLISH).format(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.ENGLISH).parse(model.getDate()));
} catch (ParseException e) {
e.printStackTrace();
}
String sessions = "N.A.";
int CancelledValue = model.getCancelled();
if (CancelledValue == 0)
{
itemViewHolder.PaymentYesNo.setText(getString(R.string.booking_detail_no));
itemViewHolder.PaymentYesNo.setBackgroundResource(R.drawable.round_corner_linear_green);
}
else
{
itemViewHolder.PaymentYesNo.setText(getString(R.string.booking_detail_yes));
itemViewHolder.PaymentYesNo.setBackgroundResource(R.drawable.round_corner_linear_red);
}
String paymentConfirmed = model.getPayment_confirmed();
String paymentType = model.getPaymentType();
if (paymentConfirmed.equals("true"))
{
itemViewHolder.PaymentStatus.setText("Confirmed");
}
else
{
itemViewHolder.PaymentStatus.setText("Pending");
}
if (CancelledValue == 0 && paymentConfirmed.equals("false") && paymentType.equals("cash"))
{
itemViewHolder.DepositThisAmount.setText("Deposit " + String.valueOf(model.getDepositAmount()) + " SAR in " +
String.valueOf(model.getDepositTimeAllowed()) + " HRS");
}
else
{
itemViewHolder.DepositThisAmount.setVisibility(View.GONE);
}
if (model.getSession() != null)
sessions = model.getSession();
itemViewHolder.mCustomTextViewCourtBookingTime.setText(date + " " + sessions);
if (getResources().getConfiguration().locale.equals(new Locale("ar"))) {
itemViewHolder.mCustomTextViewCourtPrice.setText(model.getPrice() + " " + "ريال");
itemViewHolder.mCustomTextViewCourtCancellationCutoff.setText("يمكن الغاء الحجز قبل المباراة" + " : " + model.getCancelCutoffTime());
} else {
itemViewHolder.mCustomTextViewCourtPrice.setText(getString(R.string.price, model.getPrice()));
itemViewHolder.mCustomTextViewCourtCancellationCutoff.setText(getString(R.string.cancellation_cutoff, model.getCancelCutoffTime()));
}
String cancelshow = model.getCancelshow();
if (cancelshow.equals("true"))
{
cancelValue = 1;
itemViewHolder.mAppCompatImageViewMoreHoriz.setVisibility(View.VISIBLE);
}
else
{
cancelValue = 0;
itemViewHolder.mAppCompatImageViewMoreHoriz.setVisibility(View.GONE);
}
itemViewHolder.mCustomTextViewCourtName.setText(model.getCourtName());
itemViewHolder.mAppCompatImageViewMoreHoriz.setOnClickListener(new View.OnClickListener() {
#Override
public void onClick(View v) {
PopupMenu popup = new PopupMenu(MyBookingActivity.this, v);
popup.getMenu().add(0, 1, 0, getString(R.string.my_booking_cancel));
//adding click listener
popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
#Override
public boolean onMenuItemClick(MenuItem item) {
switch (item.getItemId()) {
case 1:
cancelBooking(model.getId());
break;
//case 1:
// deleteBooking(model.getId());
}
return false;
}
});
//displaying the popup
popup.show();
}
});
itemViewHolder.mReaRelativeLayoutMyBooking.setOnClickListener(new View.OnClickListener() {
#Override
public void onClick(View v) {
//launchActivity(MyBookingDetailActivity.getActivityIntent(MyBookingActivity.this, model.getId(), "MyBooking", 1));
}
});
itemViewHolder.mAppCompatImageViewRightArrow.setOnClickListener(new View.OnClickListener() {
#Override
public void onClick(View v) {
launchActivity(MyBookingDetailActivity.getActivityIntent(MyBookingActivity.this, model.getId(), "MyBooking", 1));
}
});
}
};
private BaseRecyclerAdapter<PastBookingsApi.ApiResponse.Datum, MyPastBookingsViewHolder> mBaseRecyclerAdapterMyPastBookings = new BaseRecyclerAdapter<PastBookingsApi.ApiResponse.Datum, MyPastBookingsViewHolder>(MyPastBookingsViewHolder.class, R.layout.layout_list_item_my_bookings) {
#Override
protected void populateViewHolder(MyPastBookingsViewHolder itemViewHolder, final PastBookingsApi.ApiResponse.Datum model, int position) {
String date = null;
try {
date = new SimpleDateFormat("yyyy/MM/dd", Locale.ENGLISH).format(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.ENGLISH).parse(model.getDate()));
} catch (ParseException e) {
e.printStackTrace();
}
String sessions = "N.A.";
int CancelledValue = model.getCancelled();
if (CancelledValue == 0)
{
itemViewHolder.PaymentYesNo.setText(getString(R.string.booking_detail_no));
itemViewHolder.PaymentYesNo.setBackgroundResource(R.drawable.round_corner_linear_green);
}
else
{
itemViewHolder.PaymentYesNo.setText(getString(R.string.booking_detail_yes));
itemViewHolder.PaymentYesNo.setBackgroundResource(R.drawable.round_corner_linear_red);
}
itemViewHolder.DepositThisAmount.setVisibility(View.GONE);
int paymentConfirmed = model.getPaymentConfirmed();
if (paymentConfirmed == 1)
{
itemViewHolder.PaymentStatus.setText("Confirmed");
}
else
{
itemViewHolder.PaymentStatus.setText("Pending");
}
if (model.getSession() != null)
sessions = model.getSession();
itemViewHolder.mCustomTextViewCourtBookingTime.setText(date + " " + sessions);
if (getResources().getConfiguration().locale.equals(new Locale("ar"))) {
itemViewHolder.mCustomTextViewCourtPrice.setText(model.getPrice() + " " + "ريال");
} else {
itemViewHolder.mCustomTextViewCourtPrice.setText(getString(R.string.price, model.getPrice()));
}
itemViewHolder.mCustomTextViewCourtCancellationCutoff.setText(getString(R.string.cancellation_cutoff, "0"));
itemViewHolder.mCustomTextViewCourtName.setText(model.getCourtName());
itemViewHolder.mAppCompatImageViewMoreHoriz.setVisibility(View.VISIBLE);
itemViewHolder.mAppCompatImageViewMoreHoriz.setOnClickListener(new View.OnClickListener() {
#Override
public void onClick(View v) {
PopupMenu popup = new PopupMenu(MyBookingActivity.this, v);
popup.getMenu().add(0, 1, 0, getString(R.string.notification_delete));
popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
#Override
public boolean onMenuItemClick(MenuItem item) {
switch (item.getItemId()) {
case 1:
deleteBooking(model.getId());
break;
}
return false;
}
});
popup.show();
}
});
itemViewHolder.mAppCompatImageViewRightArrow.setOnClickListener(new View.OnClickListener() {
#Override
public void onClick(View v) {
launchActivity(MyBookingDetailActivity.getActivityIntent(MyBookingActivity.this, model.getId(), "MyBooking", 1));
}
});
itemViewHolder.mReaRelativeLayoutMyBooking.setOnClickListener(new View.OnClickListener() {
#Override
public void onClick(View v) {
// launchActivity(MyBookingDetailActivity.getActivityIntent(MyBookingActivity.this, model.getId(), "MyBooking", 1));
}
});
}
};
public static Intent getActivityIntent(Context context) {
return new Intent(context, MyBookingActivity.class);
}
private void cancelBooking(final int id) {
}
private void deleteBooking(final int id) {
}
#Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setTitle(getString(R.string.title_activity_my_booking));
setUpRecyclerView();
setUpEmptyAdapter();
swipeRefreshLayout = (SwipeRefreshLayout) findViewById(R.id.swipe_refresh_layout);
swipeRefreshLayout.setOnRefreshListener(this);
getMyBooking();
getMyPastBooking();
/*swipeRefreshLayout.post(new Runnable() {
#Override
public void run() {
swipeRefreshLayout.setRefreshing(true);
getMyBooking();
}
}
);*/
}
private void setUpEmptyAdapter() {
mRVPastBookings.setAdapter(new BaseEmptyRecyclerAdapter<EmptyViewHolderRefresh>(EmptyViewHolderRefresh.class, R.layout.layout_place_holderrefresh) {
#Override
protected void populateEmptyViewHolder(EmptyViewHolderRefresh viewHolder) {
viewHolder.mAppCompatImageView.setImageResource(R.drawable.no_booking_place_holder);
viewHolder.mCustomTextViewTitle.setText(R.string.no_bookings_available_title);
viewHolder.mCustomTextViewDescription.setText(R.string.no_bookings_available_description);
viewHolder.refreshText.setText(R.string.swipe);
//viewHolder.mCustomButton.setText(R.string.try_again);
viewHolder.mCustomButton.setOnClickListener(new View.OnClickListener() {
#Override
public void onClick(View v) {
//getMyPastBooking();
}
});
}
});
mRVOngoingBookings.setAdapter(new BaseEmptyRecyclerAdapter<EmptyViewHolderRefresh>(EmptyViewHolderRefresh.class, R.layout.layout_place_holderrefresh) {
#Override
protected void populateEmptyViewHolder(EmptyViewHolderRefresh viewHolder) {
viewHolder.mAppCompatImageView.setImageResource(R.drawable.no_booking_place_holder);
viewHolder.mCustomTextViewTitle.setText(R.string.no_bookings_available_title);
viewHolder.mCustomTextViewDescription.setText(R.string.no_bookings_available_description);
//viewHolder.mCustomButton.setText(R.string.try_again);
viewHolder.refreshText.setText(R.string.swipe);
viewHolder.mCustomButton.setOnClickListener(new View.OnClickListener() {
#Override
public void onClick(View v) {
// getMyBooking();
}
});
}
});
}
private void setUpRecyclerView() {
mRVOngoingBookings.setAdapter(mBaseRecyclerAdapterMyBookings);
DividerItemDecoration mDividerItemDecorationMyBookings = new DividerItemDecoration(this, LinearLayoutManager.VERTICAL);
mDividerItemDecorationMyBookings.setDrawable(ContextCompat.getDrawable(this, R.drawable.divider));
mRVOngoingBookings.addItemDecoration(mDividerItemDecorationMyBookings);
mRVPastBookings.setAdapter(mBaseRecyclerAdapterMyPastBookings);
DividerItemDecoration mDividerItemDecorationMyPastBookings = new DividerItemDecoration(this, LinearLayoutManager.VERTICAL);
mDividerItemDecorationMyPastBookings.setDrawable(ContextCompat.getDrawable(this, R.drawable.divider));
mRVPastBookings.addItemDecoration(mDividerItemDecorationMyPastBookings);
}
#Override
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId() == android.R.id.home) {
finishWithResultCancel();
}
return super.onOptionsItemSelected(item);
}
#Override
protected int getMenuResource() {
return RESOURCE_NO_MENU;
}
#Override
protected int getLayoutResource() {
return R.layout.activity_my_booking;
}
#Override
public void onResume() {
super.onResume();
registerEventBus();
//getMyBooking();
//getMyPastBooking();
}
#Override
public void onPause() {
super.onPause();
unRegisterEventBus();
}
private void getMyPastBooking() {
/// swipeRefreshLayout.setRefreshing(true);
final ProgressDialog pd = new ProgressDialog(MyBookingActivity.this);
pd.setMessage("Please wait..");
pd.show();
Handler mHandler = new Handler();
mHandler.postDelayed(new Runnable() {
#Override
public void run() {
pd.dismiss();
startApiService(PastBookingsApi.getServiceIntent(MyBookingActivity.this, getToken()));
}
}, 800);
}
private void getMyBooking() {
// swipeRefreshLayout.setRefreshing(true);
final ProgressDialog pd = new ProgressDialog(MyBookingActivity.this);
pd.setMessage("Please wait..");
pd.show();
Handler mHandler = new Handler();
mHandler.postDelayed(new Runnable() {
#Override
public void run() {
pd.dismiss();
startApiService(MyBookingsApi.getServiceIntent(MyBookingActivity.this, getToken()));
}
}, 2000);
//swipeRefreshLayout.setRefreshing(false);
}
#Subscribe(threadMode = ThreadMode.MAIN)
public void onMessageEvent(BaseApi.EventBusMessage eventBusMessage) {
switch (eventBusMessage.event) {
case BaseApi.EventBusMessage.EVENT_SHOW_PROGRESS_DIALOG:
showProgressDialog();
break;
case BaseApi.EventBusMessage.EVENT_HIDE_PROGRESS_DIALOG:
hideProgressDialog();
break;
default:
if (eventBusMessage.object instanceof MyBookingsApi.ApiResponse)
parseMyBookingsSuccessResponse((MyBookingsApi.ApiResponse) eventBusMessage.object);
else if (eventBusMessage.object instanceof PastBookingsApi.ApiResponse) {
parsePastBookingsSuccessResponse((PastBookingsApi.ApiResponse) eventBusMessage.object);
} else if (eventBusMessage.object instanceof BaseApi.DefaultErrorResponse) {
parseErrorResponse((BaseApi.DefaultErrorResponse) eventBusMessage.object);
} else if (eventBusMessage.object instanceof BaseApi.Error500Response) {
//parseError500Response((BaseApi.Error500Response) eventBusMessage.object);
} else if (eventBusMessage.object instanceof MyBookingCancelApi.ApiResponse) {
parseCancelBookingSuccessResponse((MyBookingCancelApi.ApiResponse) eventBusMessage.object);
} else if (eventBusMessage.object instanceof MyBookingDeleteApi.ApiResponse) {
parseDeleteBookingSuccessResponse((MyBookingDeleteApi.ApiResponse) eventBusMessage.object);
}
break;
}
}
private void parseDeleteBookingSuccessResponse(MyBookingDeleteApi.ApiResponse apiResponse) {
showSnackBar(apiResponse.getMessage());
getMyPastBooking();
}
private void parseCancelBookingSuccessResponse(final MyBookingCancelApi.ApiResponse apiResponse) {
showSnackBar(apiResponse.getMessage());
getMyBooking();
/*final ProgressDialog pd = new ProgressDialog(MyBookingActivity.this);
pd.setMessage("Please wait..");
pd.show();
Handler mHandler = new Handler();
mHandler.postDelayed(new Runnable() {
#Override
public void run() {
pd.dismiss();
startApiService(MyBookingDeleteApi.getServiceIntent(MyBookingActivity.this, getToken(), apiResponse.getData().getId()));
}
}, 800);*/
}
private void parsePastBookingsSuccessResponse(PastBookingsApi.ApiResponse apiResponse) {
List<PastBookingsApi.ApiResponse.Datum> datumList = apiResponse.getData();
if (datumList.size() > 0) {
Collections.sort(datumList, new Comparator<PastBookingsApi.ApiResponse.Datum>()
{
#Override
public int compare(PastBookingsApi.ApiResponse.Datum o1, PastBookingsApi.ApiResponse.Datum o2) {
return o1.getId() > o2.getId() ? -1 : (o1.getId() < o2.getId() ) ? 1 : 0;
}
});
mRVPastBookings.setAdapter(mBaseRecyclerAdapterMyPastBookings);
mBaseRecyclerAdapterMyPastBookings.setItems(datumList);
} else {
mRVPastBookings.setAdapter(new BaseEmptyRecyclerAdapter<EmptyViewHolderRefresh>(EmptyViewHolderRefresh.class, R.layout.layout_place_holderrefresh) {
#Override
protected void populateEmptyViewHolder(EmptyViewHolderRefresh viewHolder) {
viewHolder.mAppCompatImageView.setImageResource(R.drawable.no_booking_place_holder);
viewHolder.mCustomTextViewTitle.setText(R.string.no_bookings_available_title);
viewHolder.mCustomTextViewDescription.setText(R.string.no_bookings_available_description);
// viewHolder.mCustomButton.setText(R.string.try_again);
viewHolder.refreshText.setText(R.string.swipe);
viewHolder.mCustomButton.setOnClickListener(new View.OnClickListener() {
#Override
public void onClick(View v) {
// getMyPastBooking();
}
});
}
});
}
}
private void parseMyBookingsSuccessResponse(MyBookingsApi.ApiResponse apiResponse) {
// mCourtDataList = apiResponse.getData();
List<MyBookingsApi.ApiResponse.Datum> datumList = apiResponse.getData();
if (datumList.size() > 0) {
Collections.sort(datumList, new Comparator<MyBookingsApi.ApiResponse.Datum>()
{
#Override
public int compare(MyBookingsApi.ApiResponse.Datum o1, MyBookingsApi.ApiResponse.Datum o2) {
return o1.getId() > o2.getId() ? -1 : (o1.getId() < o2.getId() ) ? 1 : 0;
}
});
mRVOngoingBookings.setAdapter(mBaseRecyclerAdapterMyBookings);
mBaseRecyclerAdapterMyBookings.setItems(datumList);
} else {
mRVOngoingBookings.setAdapter(new BaseEmptyRecyclerAdapter<EmptyViewHolderRefresh>(EmptyViewHolderRefresh.class, R.layout.layout_place_holderrefresh) {
#Override
protected void populateEmptyViewHolder(EmptyViewHolderRefresh viewHolder) {
viewHolder.mAppCompatImageView.setImageResource(R.drawable.no_booking_place_holder);
viewHolder.mCustomTextViewTitle.setText(R.string.no_bookings_available_title);
viewHolder.mCustomTextViewDescription.setText(R.string.no_bookings_available_description);
//viewHolder.mCustomButton.setText(R.string.try_again);
viewHolder.refreshText.setText(R.string.swipe);
viewHolder.mCustomButton.setOnClickListener(new View.OnClickListener() {
#Override
public void onClick(View v) {
//getMyBooking();
}
});
}
});
}
}
private void parseError500Response(BaseApi.Error500Response error500Response) {
showAlertDialog(R.string.session_timeout_title, R.string.session_timeout_message, new DialogInterface.OnClickListener() {
#Override
public void onClick(DialogInterface dialog, int which) {
logout();
}
});
}
private void parseErrorResponse(BaseApi.DefaultErrorResponse defaultErrorResponse) {
showSnackBar(defaultErrorResponse.getMessage());
}
#Subscribe(threadMode = ThreadMode.MAIN)
public void noInternet(String message) {
mRVOngoingBookings.setAdapter(new BaseEmptyRecyclerAdapter<EmptyViewHolderRefresh>(EmptyViewHolderRefresh.class, R.layout.layout_place_holderrefresh) {
#Override
protected void populateEmptyViewHolder(EmptyViewHolderRefresh viewHolder) {
viewHolder.mAppCompatImageView.setImageResource(R.drawable.no_internet_placeholder);
viewHolder.mCustomTextViewTitle.setText(R.string.connection_problem_title);
viewHolder.mCustomTextViewDescription.setText(R.string.connection_problem_description);
viewHolder.refreshText.setText(R.string.swipe);
//viewHolder.mCustomButton.setText(R.string.try_again);
viewHolder.mCustomButton.setOnClickListener(new View.OnClickListener() {
#Override
public void onClick(View v) {
// getMyBooking();
}
});
}
});
mRVPastBookings.setAdapter(new BaseEmptyRecyclerAdapter<EmptyViewHolderRefresh>(EmptyViewHolderRefresh.class, R.layout.layout_place_holderrefresh) {
#Override
protected void populateEmptyViewHolder(EmptyViewHolderRefresh viewHolder) {
viewHolder.mAppCompatImageView.setImageResource(R.drawable.no_internet_placeholder);
viewHolder.mCustomTextViewTitle.setText(R.string.connection_problem_title);
viewHolder.mCustomTextViewDescription.setText(R.string.connection_problem_description);
viewHolder.refreshText.setText(R.string.swipe);
//viewHolder.mCustomButton.setText(R.string.try_again);
viewHolder.mCustomButton.setOnClickListener(new View.OnClickListener() {
#Override
public void onClick(View v) {
// getMyPastBooking();
}
});
}
});
}
}
and activity_my_booking layout is:
<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.SwipeRefreshLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="#+id/swipe_refresh_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<android.support.design.widget.CoordinatorLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="#+id/coordinatorLayout"
android:layout_width="match_parent"
android:layout_height="match_parent">
<include layout="#layout/layout_toolbar" />
<include layout="#layout/content_my_booking" />
</android.support.design.widget.CoordinatorLayout>
</android.support.v4.widget.SwipeRefreshLayout>
Set the first RecyclerView’s height to wrap_content and set setNestedScrollingEnabled to false
RecyclerView rv_ongoing_bookings= (RecyclerView) findViewById(R.id.rv_ongoing_bookings);
rv_ongoing_bookings.setNestedScrollingEnabled(false);
To achieve it my approach would be to customize my recyclerView adapter to act as a section header recycler view, something like this:
https://android-arsenal.com/details/1/4495
The following code will make recycler view expandable...
public class ExpandableRecyclerView extends RecyclerView
{
private boolean expanded = false;
public ExpandableRecyclerView(Context context, AttributeSet attrs, int defStyle)
{
super(context, attrs, defStyle);
}
public ExpandableRecyclerView(Context context)
{
super(context);
}
public ExpandableRecyclerView(Context context, AttributeSet attrs)
{
super(context, attrs);
}
public boolean isExpanded()
{
return expanded;
}
#Override
public void onMeasure(int widthMeasureSpec, int heightMeasureSpec)
{
if (isExpanded())
{
int expandSpec = MeasureSpec.makeMeasureSpec(MEASURED_SIZE_MASK, MeasureSpec.AT_MOST);
super.onMeasure(widthMeasureSpec, expandSpec);
ViewGroup.LayoutParams params = getLayoutParams();
params.height = getMeasuredHeight();
}
else
{
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}
}
public void setExpanded(boolean expanded)
{
this.expanded = expanded;
}
}
Usage... use it the way you use recycler view...
just set recyclerView.setExpanded(true);
You may directly use it inside scrollview...
So, it's not really an answer to your question, it's more like a suggestion to use RecyclerView as it should be depending on the screenshot which you included in your question.
You really don't need to create two RecyclerView's to achieve the layout which you need. As I understand you want to show some items and put a separator with text depending on something (Booking's date as I can see).
In RecyclerView.Adapter you have getItemViewType where you can return an int value depending on some variables.For example your getItemViewType should look something like this:
#Override
public int getItemViewType(int position) {
MyObject myObject = mItems.get(position);
// myObject.isSeparator() is a sample function which helps you identify it you should show construct a booking view or separator
if(myObject.isSeparator()){
// this variable is declared inside your Adapter ->
// private static final int VIEW_TYPE_SEPARATOR = 1;
return VIEW_TYPE_SEPARATOR;
}
// private static final int VIEW_TYPE_BOOKING = 0;
return VIEW_TYPE_BOOKING;
}
Depending on those values you need to create two ViewHolder's :
#Override
public RecyclerView.ViewHolder onCreateViewHolder(#NonNull ViewGroup parent, int viewType) {
if (VIEW_TYPE_SEPARATOR == viewType) {
new SeparatorViewHolder(/* Some params which you need here */);
}
return new BookingViewHolder(/* Some other params which you need here */);
}
And ->
#Override
public void onBindViewHolder(#NonNull RecyclerView.ViewHolder holder, int position) {
if (VIEW_TYPE_SEPARATOR == getItemViewType(position)) {
// Populate SeparatorViewHolder
} else {
// Populate BookingViewHolder
}
}
And at the end you should populate your List with the objects you need to determine if the item is a Booking item for example or a Separator.
I hope you got the main idea.

dm77 barcodescanner Zbar camera Preview delay in fragment

Hi I am using this library for my android bar code reader and it is working fine with activities but it give some what delay in initiate(Not smooth like when it use in the Activities)when use with the fragment any solution for this.
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
<FrameLayout
android:id="#+id/content_frame"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<android.support.v7.widget.Toolbar
android:id="#+id/toolbar"
android:layout_gravity="top"
android:minHeight="?attr/actionBarSize"
android:background="#color/actionbar_opacity"
app:theme="#style/TransparentToolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<RelativeLayout
android:id="#+id/btn_enable_qr"
android:layout_width="match_parent"
android:layout_height="60dp"
android:layout_marginBottom="55dp"
android:layout_marginLeft="40dp"
android:layout_marginRight="40dp"
android:gravity="bottom"
android:layout_alignParentBottom="true"
android:clickable="true"
android:layout_gravity="bottom"
android:background="#drawable/circle_layout_for_start_scan">
</RelativeLayout>
</RelativeLayout>
This is My Fragment & when application start I set this fragment to my main activity
public class ScannerFragment extends Fragment implements ZBarScannerView.ResultHandler {
private ZBarScannerView mScannerView;
private FrameLayout contentFrame;
RelativeLayout enableQR;
private static final int ZBAR_CAMERA_PERMISSION = 1;
public static ScannerFragment newInstance() {
return new ScannerFragment();
}
#SuppressLint("ClickableViewAccessibility")
#Override
public void onCreate(Bundle state) {
super.onCreate(state);
}
#Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View rootView = null;
try {
rootView = inflater.inflate(R.layout.activity_full_scanner, container, false);
contentFrame = (FrameLayout) rootView.findViewById(R.id.content_frame);
enableQR = (RelativeLayout) rootView.findViewById(R.id.btn_enable_qr);
enableQR.setOnTouchListener(new View.OnTouchListener() {
#Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN: {
launchActivity();
break;
}
case MotionEvent.ACTION_UP: {
releaseCamera();
}
}
return true;
}
});
} catch (Exception e) {
// Log.e(TAG, "onCreateView: " + e.toString());
}
return rootView;
}
#Override
public void onResume() {
super.onResume();
}
public void launchActivity() {
if (ContextCompat.checkSelfPermission(getActivity(), Manifest.permission.CAMERA)
!= PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(getActivity(),
new String[]{Manifest.permission.CAMERA}, ZBAR_CAMERA_PERMISSION);
} else {
setUpQrScanner();
}
}
public void setUpQrScanner() {
mScannerView = new ZBarScannerView(getActivity());
mScannerView.setFormats(BarcodeFormat.ALL_FORMATS);
contentFrame.addView(mScannerView);
mScannerView.setResultHandler(ScannerFragment.this);
mScannerView.startCamera(-1);
mScannerView.setAutoFocus(true);
}
public void releaseCamera() {
mScannerView.stopCamera();
contentFrame.removeView(mScannerView);
}
#Override
public void handleResult(Result rawResult) {
try {
scannerSoundAndVibration();
} catch (Exception e) {}
Toast.makeText(getActivity(), "Result" + rawResult.getContents()+" TYPE: "+rawResult.getBarcodeFormat().getId(), Toast.LENGTH_LONG).show();
}
#Override
public void onPause() {
super.onPause();
}
private void scannerSoundAndVibration() {
/**
* scanner sound alert time in millisecond
*/
final ToneGenerator tg = new ToneGenerator(AudioManager.STREAM_NOTIFICATION, 200);
tg.startTone(ToneGenerator.TONE_CDMA_KEYPAD_VOLUME_KEY_LITE);
/**
* scanner vibration alert time in millisecond
*/
Vibrator v = (Vibrator) getActivity().getSystemService(Context.VIBRATOR_SERVICE);
v.vibrate(250);
}
#Override
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
switch (requestCode) {
case ZBAR_CAMERA_PERMISSION:
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
setUpQrScanner();
} else {
Toast.makeText(getActivity(), "Please grant camera permission to use the QR Scanner", Toast.LENGTH_SHORT).show();
}
return;
}
}
}

Update custom adapter with query results

i want to query results from custom adapter by comparing query text with list in RecycleView, it successfully gets results from query then i make list of results and update the existing adapter but it does not effect anything, i use below code fot that
combinationMessagesList = createCombinationMessagesList();
combinationMessages = createCombinationMessagesList();
combinationMessages.clear();
for (int i = 0; i < combinationMessagesList.size(); i++) {
CombinationMessage message = combinationMessagesList.get(i);
if (message.getBody().toString().equals(search.getText().toString())){
combinationMessages.add(combinationMessagesList.get(i));
}
}
messagesAdapter.setList(combinationmessagesList);
messagesAdapter.notifyDataSetChanged();
}
PrivateDialogActivity
public class PrivateDialogActivity extends BaseDialogActivity {
private FriendOperationAction friendOperationAction;
private FriendObserver friendObserver;
private int operationItemPosition;
private final String TAG = "PrivateDialogActivity";
EditText search;
public static void start(Context context, User opponent, Dialog dialog) {
Intent intent = new Intent(context, PrivateDialogActivity.class);
intent.putExtra(QBServiceConsts.EXTRA_OPPONENT, opponent);
intent.putExtra(QBServiceConsts.EXTRA_DIALOG, dialog);
context.startActivity(intent);
}
#Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
initFields();
context = this;
if (dialog == null) {
finish();
}
setUpActionBarWithUpButton();
if (isNetworkAvailable()) {
deleteTempMessages();
}
addObservers();
initMessagesRecyclerView();
search = (EditText) findViewById(R.id.search_edittext);
Button button = (Button) findViewById(R.id.search);
button.setOnClickListener(new View.OnClickListener() {
#Override
public void onClick(View v) {
showResult();
}
});
}
private void showResult() {
combinationMessagesList = createCombinationMessagesList();
combinationMessages = createCombinationMessagesList();
combinationMessages.clear();
for (int i = 0; i < combinationMessagesList.size(); i++) {
CombinationMessage message = combinationMessagesList.get(i);
if (message.getBody().toString().equals(search.getText().toString())){
combinationMessages.add(combinationMessagesList.get(i));
}
}
messagesAdapter.setList(combinationMessagesList);
messagesAdapter.notifyDataSetChanged();
}
#Override
protected void addActions() {
super.addActions();
addAction(QBServiceConsts.ACCEPT_FRIEND_SUCCESS_ACTION, new AcceptFriendSuccessAction());
addAction(QBServiceConsts.ACCEPT_FRIEND_FAIL_ACTION, failAction);
addAction(QBServiceConsts.REJECT_FRIEND_SUCCESS_ACTION, new RejectFriendSuccessAction());
addAction(QBServiceConsts.REJECT_FRIEND_FAIL_ACTION, failAction);
updateBroadcastActionList();
}
#Override
protected void onResume() {
super.onResume();
checkForCorrectChat();
if (isNetworkAvailable()) {
startLoadDialogMessages();
}
checkMessageSendingPossibility();
}
#Override
protected void onDestroy() {
super.onDestroy();
deleteObservers();
}
#Override
protected void updateActionBar() {
setOnlineStatus(opponentUser);
checkActionBarLogo(opponentUser.getAvatar(), R.drawable.placeholder_user);
}
#Override
protected void onConnectServiceLocally(QBService service) {
onConnectServiceLocally();
setOnlineStatus(opponentUser);
}
#Override
protected void onFileLoaded(QBFile file, String dialogId) {
if(!dialogId.equals(dialog.getDialogId())){
return;
}
try {
privateChatHelper.sendPrivateMessageWithAttachImage(file, opponentUser.getUserId(), null, null);
} catch (QBResponseException exc) {
ErrorUtils.showError(this, exc);
}
}
#Override
protected Bundle generateBundleToInitDialog() {
Bundle bundle = new Bundle();
bundle.putInt(QBServiceConsts.EXTRA_OPPONENT_ID, opponentUser.getUserId());
return bundle;
}
#Override
protected void initMessagesRecyclerView() {
super.initMessagesRecyclerView();
messagesAdapter = new PrivateDialogMessagesAdapter(this, friendOperationAction, combinationMessagesList, this, dialog);
messagesRecyclerView.addItemDecoration(
new StickyRecyclerHeadersDecoration((StickyRecyclerHeadersAdapter) messagesAdapter));
findLastFriendsRequest();
messagesRecyclerView.setAdapter(messagesAdapter);
scrollMessagesToBottom();
}
#Override
protected void updateMessagesList() {
initActualExtras();
checkForCorrectChat();
int oldMessagesCount = messagesAdapter.getAllItems().size();
this.combinationMessagesList = createCombinationMessagesList();
Log.d(TAG, "combinationMessagesList = " + combinationMessagesList);
messagesAdapter.setList(combinationMessagesList);
findLastFriendsRequest();
checkForScrolling(oldMessagesCount);
}
private void initActualExtras() {
opponentUser = (User) getIntent().getExtras().getSerializable(QBServiceConsts.EXTRA_OPPONENT);
dialog = (Dialog) getIntent().getExtras().getSerializable(QBServiceConsts.EXTRA_DIALOG);
}
#Override
public void notifyChangedUserStatus(int userId, boolean online) {
super.notifyChangedUserStatus(userId, online);
if (opponentUser != null && opponentUser.getUserId() == userId) {
setOnlineStatus(opponentUser);
}
}
#Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.private_dialog_menu, menu);
return true;
}
#Override
public boolean onOptionsItemSelected(MenuItem item) {
boolean isFriend = DataManager.getInstance().getFriendDataManager().getByUserId(
opponentUser.getUserId()) != null;
if (!isFriend && item.getItemId() != android.R.id.home) {
ToastUtils.longToast(R.string.dialog_user_is_not_friend);
return true;
}
switch (item.getItemId()) {
case R.id.action_audio_call:
callToUser(opponentUser, QBRTCTypes.QBConferenceType.QB_CONFERENCE_TYPE_AUDIO);
break;
case R.id.switch_camera_toggle:
callToUser(opponentUser, QBRTCTypes.QBConferenceType.QB_CONFERENCE_TYPE_VIDEO);
break;
default:
super.onOptionsItemSelected(item);
}
return true;
}
#Override
protected void checkMessageSendingPossibility() {
boolean enable = dataManager.getFriendDataManager().existsByUserId(opponentUser.getUserId()) && isNetworkAvailable();
checkMessageSendingPossibility(enable);
}
#OnClick(R.id.toolbar)
void openProfile(View view) {
UserProfileActivity.start(this, opponentUser.getUserId());
}
private void initFields() {
chatHelperIdentifier = QBService.PRIVATE_CHAT_HELPER;
friendOperationAction = new FriendOperationAction();
friendObserver = new FriendObserver();
initActualExtras();
// opponentUser = (User) getIntent().getExtras().getSerializable(QBServiceConsts.EXTRA_OPPONENT);
// dialog = (Dialog) getIntent().getExtras().getSerializable(QBServiceConsts.EXTRA_DIALOG);
combinationMessagesList = createCombinationMessagesList();
title = opponentUser.getFullName();
}
private void addObservers() {
dataManager.getFriendDataManager().addObserver(friendObserver);
}
private void deleteObservers() {
dataManager.getFriendDataManager().deleteObserver(friendObserver);
}
private void findLastFriendsRequest() {
((PrivateDialogMessagesAdapter) messagesAdapter).findLastFriendsRequestMessagesPosition();
messagesAdapter.notifyDataSetChanged();
}
private void setOnlineStatus(User user) {
if (user != null) {
if (friendListHelper != null) {
String offlineStatus = getString(R.string.last_seen, DateUtils.toTodayYesterdayShortDateWithoutYear2(user.getLastLogin()),
DateUtils.formatDateSimpleTime(user.getLastLogin()));
setActionBarSubtitle(
OnlineStatusUtils.getOnlineStatus(this, friendListHelper.isUserOnline(user.getUserId()), offlineStatus));
}
}
}
public void sendMessage(View view) {
sendMessage(true);
}
private void callToUser(User user, QBRTCTypes.QBConferenceType qbConferenceType) {
if (!isChatInitializedAndUserLoggedIn()) {
ToastUtils.longToast(R.string.call_chat_service_is_initializing);
return;
}
List<QBUser> qbUserList = new ArrayList<>(1);
qbUserList.add(UserFriendUtils.createQbUser(user));
CallActivity.start(PrivateDialogActivity.this, qbUserList, qbConferenceType, null);
}
private void acceptUser(final int userId) {
if (isNetworkAvailable()) {
if (!isChatInitializedAndUserLoggedIn()) {
ToastUtils.longToast(R.string.call_chat_service_is_initializing);
return;
}
showProgress();
QBAcceptFriendCommand.start(this, userId);
} else {
ToastUtils.longToast(R.string.dlg_fail_connection);
return;
}
}
private void rejectUser(final int userId) {
if (isNetworkAvailable()) {
if (!isChatInitializedAndUserLoggedIn()) {
ToastUtils.longToast(R.string.call_chat_service_is_initializing);
return;
}
showRejectUserDialog(userId);
} else {
ToastUtils.longToast(R.string.dlg_fail_connection);
return;
}
}
private void showRejectUserDialog(final int userId) {
User user = DataManager.getInstance().getUserDataManager().get(userId);
if (user == null) {
return;
}
TwoButtonsDialogFragment.show(getSupportFragmentManager(),
getString(R.string.dialog_message_reject_friend, user.getFullName()),
new MaterialDialog.ButtonCallback() {
#Override
public void onPositive(MaterialDialog dialog) {
super.onPositive(dialog);
showProgress();
QBRejectFriendCommand.start(PrivateDialogActivity.this, userId);
}
});
}
private void checkForCorrectChat() {
Dialog updatedDialog = null;
if (dialog != null) {
updatedDialog = dataManager.getDialogDataManager().getByDialogId(dialog.getDialogId());
} else {
finish();
}
if (updatedDialog == null) {
finish();
} else {
dialog = updatedDialog;
}
}
private class FriendOperationAction implements FriendOperationListener {
#Override
public void onAcceptUserClicked(int position, int userId) {
operationItemPosition = position;
acceptUser(userId);
}
#Override
public void onRejectUserClicked(int position, int userId) {
operationItemPosition = position;
rejectUser(userId);
}
}
private class AcceptFriendSuccessAction implements Command {
#Override
public void execute(Bundle bundle) {
((PrivateDialogMessagesAdapter) messagesAdapter).clearLastRequestMessagePosition();
messagesAdapter.notifyItemChanged(operationItemPosition);
startLoadDialogMessages();
hideProgress();
}
}
private class RejectFriendSuccessAction implements Command {
#Override
public void execute(Bundle bundle) {
((PrivateDialogMessagesAdapter) messagesAdapter).clearLastRequestMessagePosition();
messagesAdapter.notifyItemChanged(operationItemPosition);
startLoadDialogMessages();
hideProgress();
}
}
private class FriendObserver implements Observer {
#Override
public void update(Observable observable, Object data) {
if (data != null && data.equals(FriendDataManager.OBSERVE_KEY)) {
checkForCorrectChat();
checkMessageSendingPossibility();
}
}
}
}
it was my own mistake it code, i made the code work by changing messagesAdapter.setList(combinationmessagesList)
to
messagesAdapter.setList(combinationMessages);

how to read content description for an alert dialog in android

I am alerting the user after some action and showing alert dialog but when accessibility is on it is not reading full alert dailog header and body. It is reading only header. I found this issue in samsung galaxy s5.
Please help me solving this issue.
public class TransactionDialog extends DialogFragment {
private int _state = -1;
private final String TITLE = "TITLE";
private final String MESSAGE = "MESSAGE";
private final String POS_TEXT = "POS_TEXT";
private final String STATE = "STATE";
private int _title = 0;
private int _message = 0;
private int _positiveText = 0;
private NoticeDialogListener mListener;
Logger logger = Logger.getNewLogger("com.ui.TransactionDialog");
boolean actionPerformed = false;
AlertDialog dialog = null;
public TransactionDialog() {
}
public void setListener(NoticeDialogListener listener) {
this.mListener = listener;
}
public TransactionDialog(int title, int message, int positiveText, int state) {
this._title = title;
this._message = message;
this._positiveText = positiveText;
this._state = state;
}
public int getState() {
return _state;
}
#Override
public void onSaveInstanceState(Bundle outState) {
// TODO Auto-generated method stub
super.onSaveInstanceState(outState);
outState.putInt(TITLE, this._title);
outState.putInt(MESSAGE, this._message);
outState.putInt(POS_TEXT, this._positiveText);
outState.putInt(STATE, this._state);
}
#Override
public void onResume() {
super.onResume();
logger.debug("TITLE:" + this._title);
logger.debug("_message:" + this._message);
logger.debug("_positiveText:" + this._positiveText);
logger.debug("_state:" + this._state);
}
#Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
logger.debug("Created");
}
#Override
public void onDismiss(DialogInterface dialog) {
// TODO Auto-generated method stub
super.onDismiss(dialog);
mListener.onDialogDismissed();
}
#Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
logger.debug("ON CREATE");
if (savedInstanceState != null) {
this._title = savedInstanceState.getInt(TITLE);
this._message = savedInstanceState.getInt(MESSAGE);
this._positiveText = savedInstanceState.getInt(POS_TEXT);
this._state = savedInstanceState.getInt(STATE);
}
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setTitle(getResources().getString(this._title))
.setMessage(getResources().getString(_message))
.setPositiveButton(getResources().getString(_positiveText), new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
if(actionPerformed)
return;
actionPerformed = true;
mListener.onDialogPositiveClick(TransactionDialog.this);
}
});
dialog = builder.create();
dialog.setCanceledOnTouchOutside(false);
dialog.show();
dialog.setOnKeyListener(new OnKeyListener() {
#Override
public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) {
// TODO Auto-generated method stub
if (keyCode == KeyEvent.KEYCODE_BACK) {
mListener.onDialogPositiveClick(TransactionDialog.this);
}
return false;
}
});
return dialog;
}
#Override
public void onAttach(Activity activity) {
super.onAttach(activity);
// Verify that the host activity implements the callback interface
try {
// Instantiate the NoticeDialogListener so we can send events to the
// host
mListener = (NoticeDialogListener) activity;
} catch (ClassCastException e) {
// The activity doesn't implement the interface, throw exception
throw new ClassCastException(activity.toString()
+ " must implement NoticeDialogListener");
}
}
public interface NoticeDialogListener {
public void onDialogPositiveClick(DialogFragment dialog);
public void onDialogDismissed();
}}
Here i am using the txndialog class for creating the alert dialog.
private TransactionDialog transactionDialog;
transactionDialog = (TransactionDialog) newTransactionFrgment;
transactionDialog.setListener(this);
transactionDialog = new TransactionDialog(R.string.transaction_complete_header, R.string.transaction_complete_message,
R.string.transaction_complete_positive_button, STATE_SET_TRANSACION);
transactionDialog.show(getFragmentManager(), TRANSACTION_DIALOG_TAG);

Categories

Resources