Skip to content

Commit

Permalink
Fix #1 bug with AM-PM click
Browse files Browse the repository at this point in the history
  • Loading branch information
J-Jamet committed Oct 31, 2016
1 parent 3de0401 commit acca541
Show file tree
Hide file tree
Showing 8 changed files with 145 additions and 15 deletions.
2 changes: 1 addition & 1 deletion build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ buildscript {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:2.2.1'
classpath 'com.android.tools.build:gradle:2.2.2'

// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
Expand Down
8 changes: 4 additions & 4 deletions sample/build.gradle
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
apply plugin: 'com.android.application'

android {
compileSdkVersion 24
buildToolsVersion "24.0.0"
compileSdkVersion 25
buildToolsVersion "25.0.0"
defaultConfig {
applicationId "com.satanasoft.switchdatetimepicker"
minSdkVersion 15
targetSdkVersion 24
targetSdkVersion 25
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
Expand All @@ -24,7 +24,7 @@ dependencies {
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.android.support', module: 'support-annotations'
})
compile 'com.android.support:appcompat-v7:24.2.1'
compile 'com.android.support:appcompat-v7:25.0.0'
testCompile 'junit:junit:4.12'
compile project(path: ':switchdatetime')
}
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,6 @@ public void onClick(View view) {
public void onSaveInstanceState(Bundle savedInstanceState) {
// Save the current textView
savedInstanceState.putCharSequence(STATE_TEXTVIEW, textView.getText());

super.onSaveInstanceState(savedInstanceState);
}
}
8 changes: 4 additions & 4 deletions switchdatetime/build.gradle
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
apply plugin: 'com.android.library'

android {
compileSdkVersion 24
buildToolsVersion "24.0.0"
compileSdkVersion 25
buildToolsVersion "25.0.0"

defaultConfig {
minSdkVersion 15
targetSdkVersion 24
targetSdkVersion 25
versionCode 1
versionName "1.0"

Expand All @@ -26,6 +26,6 @@ dependencies {
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.android.support', module: 'support-annotations'
})
compile 'com.android.support:appcompat-v7:24.2.1'
compile 'com.android.support:appcompat-v7:25.0.0'
testCompile 'junit:junit:4.12'
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,131 @@
package com.kunzisoft.switchdatetime;

import android.annotation.TargetApi;
import android.content.Context;
import android.content.res.Configuration;
import android.os.Build;
import android.util.AttributeSet;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewParent;
import android.widget.TimePicker;

/**
* A class for solve listener with AM-PM click <br />
* Thanks to Velval for init code
* @author J-Jamet
* @version 1.0
*/
public class AMPMTimePicker extends TimePicker {

private static final String TAG = "AMPMTimePicker";
private OnTimeChangedListener onTimeChangedListener;

public AMPMTimePicker(Context context) {
super(context);
}

public AMPMTimePicker(Context context, AttributeSet attrs) {
super(context, attrs);
}

public AMPMTimePicker(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}

@TargetApi(Build.VERSION_CODES.LOLLIPOP)
public AMPMTimePicker(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
}

@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
// Stop ScrollView from getting involved once you interact with the View
if (ev.getActionMasked() == MotionEvent.ACTION_DOWN) {
ViewParent p = getParent();
if (p != null)
p.requestDisallowInterceptTouchEvent(true);
}
return false;
}

@Override
public void setOnTimeChangedListener(OnTimeChangedListener onTimeChangedListener) {
super.setOnTimeChangedListener(onTimeChangedListener);
this.onTimeChangedListener = onTimeChangedListener;
}

@Override
protected void onFinishInflate() {
super.onFinishInflate();
init();
}

@SuppressWarnings("deprecation")
private void init() {
try {
ViewGroup amPmView;

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {

// LinearLayout (LOLLIPOP)
// GridLayout (M-LANDSCAPE)
// LinearLayout (M-PORTRAIT)
ViewGroup v1 = (ViewGroup) getChildAt(0);

if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {

// FrameLayout (LOLLIPOP-LANDSCAPE)
// FrameLayout - id:time_header (LOLLIPOP-PORTRAIT)
ViewGroup v2 = (ViewGroup) v1.getChildAt(0);

// FrameLayout - id:TimeHeader (LOLLIPOP-LANDSCAPE)
// LinearLayout (LOLLIPOP-PORTRAIT)
ViewGroup v3 = (ViewGroup) v2.getChildAt(0);

if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {
ViewGroup v4 = (ViewGroup) v3.getChildAt(0); // LinearLayout (LOLLIPOP)
amPmView = (ViewGroup) v4.getChildAt(3); // LinearLayout - id:ampm_layout (LOLLIPOP)
} else { // PORTRAIT
amPmView = (ViewGroup) v3.getChildAt(3); // LinearLayout - id:ampm_layout (LOLLIPOP)
}
} else { // M and after
if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {
ViewGroup v2 = (ViewGroup) v1.getChildAt(1); // RelativeLayout (M)
amPmView = (ViewGroup) v2.getChildAt(1); // LinearLayout - id:ampm_layout (M)
} else {
ViewGroup v2 = (ViewGroup) v1.getChildAt(0); // RelativeLayout - id:time_header (M)
amPmView = (ViewGroup) v2.getChildAt(3); // LinearLayout - id:ampm_layout (M)
}
}

View am = amPmView.getChildAt(0); // AppCompatCheckedTextView - id:am_label
View pm = amPmView.getChildAt(1); // AppCompatCheckedTextView - id:pm_label

View.OnTouchListener listener = new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
int hour;
int minute;
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
hour = getCurrentHour();
minute = getCurrentMinute();
} else {
hour = getHour();
minute = getMinute();
}
hour = (hour >= 12) ? hour - 12 : hour + 12;
onTimeChangedListener.onTimeChanged(AMPMTimePicker.this, hour, minute);
return false;
}
};
am.setOnTouchListener(listener);
pm.setOnTouchListener(listener);
}
} catch (Exception e) {
Log.e(TAG, "TimePicker is not defined for this Android version : " + e.getMessage());
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -162,7 +162,7 @@ else if (switcher.getDisplayedChild() == 1) {
});

// Construct TimePicker
TimePicker timePicker = (TimePicker) dialog.findViewById(R.id.timePicker);
TimePicker timePicker = (AMPMTimePicker) dialog.findViewById(R.id.timePicker);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
timePicker.setHour(hour);
} else {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,11 +12,11 @@
android:inAnimation="@anim/dialog_enter_from_top"
android:outAnimation="@anim/dialog_leave_to_bottom"
android:layout_gravity="center">
<TimePicker
<com.kunzisoft.switchdatetime.AMPMTimePicker
android:id="@+id/timePicker"
android:layout_width="@dimen/pickerWidth"
android:layout_height="match_parent">
</TimePicker>
</com.kunzisoft.switchdatetime.AMPMTimePicker>
<DatePicker
android:id="@+id/datePicker"
android:layout_width="@dimen/pickerWidth"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -54,12 +54,12 @@
android:inAnimation="@anim/dialog_enter_from_right"
android:outAnimation="@anim/dialog_leave_to_left"
android:layout_gravity="center">
<TimePicker
<com.kunzisoft.switchdatetime.AMPMTimePicker
android:id="@+id/timePicker"
android:layout_gravity="center"
android:layout_width="wrap_content"
android:layout_height="match_parent">
</TimePicker>
</com.kunzisoft.switchdatetime.AMPMTimePicker>
<DatePicker
android:id="@+id/datePicker"
android:layout_gravity="center"
Expand Down

0 comments on commit acca541

Please sign in to comment.