Skip to content

Commit

Permalink
Internal change.
Browse files Browse the repository at this point in the history
PiperOrigin-RevId: 368230474
  • Loading branch information
Nobody authored and material-automation committed Apr 13, 2021
1 parent d5db065 commit 5cb61f3
Show file tree
Hide file tree
Showing 3 changed files with 187 additions and 170 deletions.
185 changes: 185 additions & 0 deletions components/ActivityIndicator/src/MDCActivityIndicator+Interface.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,185 @@
// Copyright 2016-present the Material Components for iOS authors. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

// IWYU pragma: private

#import <UIKit/UIKit.h>

@class MDCActivityIndicatorTransition;
@protocol MDCActivityIndicatorDelegate;

/**
Different operating modes for the activity indicator.
This component can be used as a determinate progress indicator or an indeterminate activity
indicator.
Default value is MDCActivityIndicatorModeIndeterminate.
*/
typedef NS_ENUM(NSInteger, MDCActivityIndicatorMode) {
/** Indeterminate indicators visualize an unspecified wait time. */
MDCActivityIndicatorModeIndeterminate,
/** Determinate indicators display how long an operation will take. */
MDCActivityIndicatorModeDeterminate,
};

/**
A Material Design activity indicator.
The activity indicator is a circular spinner that shows progress of an operation. By default the
activity indicator assumes indeterminate progress of an unspecified length of time. In contrast to
a standard UIActivityIndicator, MDCActivityIndicator supports showing determinate progress and uses
custom Material Design animation for indeterminate progress.
See https://material.io/go/design-progress-indicators
*/
IB_DESIGNABLE
@interface MDCActivityIndicator : UIView

/**
The callback delegate. See @c MDCActivityIndicatorDelegate.
*/
@property(nonatomic, weak, nullable) id<MDCActivityIndicatorDelegate> delegate;

/**
Whether or not the activity indicator is currently animating.
*/
@property(nonatomic, assign, getter=isAnimating) BOOL animating;

/**
Spinner radius width. Defaults to 12dp (24x24dp circle), with a minimum of 5dp. The spinner is
centered in the view's bounds. If the bounds are smaller than the diameter of the spinner, the
spinner may be clipped when clipToBounds is true.
*/
@property(nonatomic, assign) CGFloat radius UI_APPEARANCE_SELECTOR;

/**
Spinner stroke width. Defaults to 2.5.
*/
@property(nonatomic, assign) CGFloat strokeWidth UI_APPEARANCE_SELECTOR;

/**
Show a faint ink track along the path of the indicator. Should be enabled when the activity
indicator wraps around another circular element, such as an avatar or a FAB. Defaults to NO.
*/
@property(nonatomic, assign) IBInspectable BOOL trackEnabled;

/**
The mode of the activity indicator. Default is MDCActivityIndicatorModeIndeterminate. If
currently animating, it will animate the transition between the current mode to the new mode.
*/
@property(nonatomic, assign) IBInspectable MDCActivityIndicatorMode indicatorMode;

/**
Set the mode of the activity indicator. If currently animating, it will animate the transition
between the current mode to the new mode. Default is MDCActivityIndicatorModeIndeterminate with no
animation.
*/
- (void)setIndicatorMode:(MDCActivityIndicatorMode)mode animated:(BOOL)animated;

/**
Progress is the extent to which the activity indicator circle is drawn to completion when
indicatorMode is MDCActivityIndicatorModeDeterminate. Progress is drawn clockwise to complete a
circle. Valid range is between [0-1]. Default is zero. 0.5 progress is half the circle. The
transitions between progress levels are animated.
*/
@property(nonatomic, assign) IBInspectable float progress;

/**
Set the determinate progress of the activity indicator when indicatorMode is
MDCActivityIndicatorModeDeterminate.
*/
- (void)setProgress:(float)progress animated:(BOOL)animated;

/**
The array of colors that are cycled through when animating the spinner. Populated with a set of
default colors.
@note If an empty array is provided to this property's setter, then the provided array will be
discarded and an array consisting of the default color values will be assigned instead.
*/
@property(nonatomic, copy, nonnull) NSArray<UIColor *> *cycleColors UI_APPEARANCE_SELECTOR;

/**
Starts the animated activity indicator. Does nothing if the spinner is already animating.
*/
- (void)startAnimating;

/**
Starts the animated activity indicator after performing the provided transition. The animation
cycle will begin on the cycleStartIndex provided. The startTransition will be applied with the
starting and ending positions of the indicator stroke at the moment when the animation will begin
taking into account the provided cycleStartIndex in the range [0,1]. The indicatorMode must be
MDCActivityIndicatorModeIndeterminate before calling.
*/
- (void)startAnimatingWithTransition:(nonnull MDCActivityIndicatorTransition *)startTransition
cycleStartIndex:(NSInteger)cycleStartIndex;

/**
Stops the animated activity indicator with a short opacity and stroke width animation. Does nothing
if the spinner is not animating.
*/
- (void)stopAnimating;

/**
Stops the animated activity indicator and then performs the provided transition. The provided
stopTransition will be called with the starting and ending positions of the indicator stroke at the
moment when the animation will begin in the range [0,1]. The indicatorMode must be
MDCActivityIndicatorModeIndeterminate before calling.
*/
- (void)stopAnimatingWithTransition:(nonnull MDCActivityIndicatorTransition *)stopTransition;

/**
A block that is invoked when the @c MDCActivityIndicator receives a call to @c
traitCollectionDidChange:. The block is called after the call to the superclass.
*/
@property(nonatomic, copy, nullable) void (^traitCollectionDidChangeBlock)
(MDCActivityIndicator *_Nonnull activityIndicator,
UITraitCollection *_Nullable previousTraitCollection);

@end
typedef void (^MDCActivityIndicatorAnimation)(CGFloat strokeStart, CGFloat strokeEnd);

/**
Describes an animation that can be provided to an MDCActivityIndicator instance to perform before
or after its standard cycle animation.
*/
@interface MDCActivityIndicatorTransition : NSObject

/**
The animations to be performed by MDCActivityIndicator. In this block add CAAnimations to be
animated before or after MDCActivityIndicator's cycle animation. MDCActivityIndicator will trigger
these animations and call completion after they complete.
*/
@property(nonatomic, copy, nonnull) MDCActivityIndicatorAnimation animation;

/**
The completion block to call after animation's completion. This should be used to clean up any
layers placed and animating on the MDCActivityIndicator.
*/
@property(nonatomic, copy, nullable) void (^completion)(void);

/**
The duration of the animation.
*/
@property(nonatomic, assign) NSTimeInterval duration;

- (nonnull instancetype)init NS_UNAVAILABLE;

- (nonnull instancetype)initWithCoder:(nonnull NSCoder *)aDecoder NS_UNAVAILABLE;

- (nonnull instancetype)initWithAnimation:(_Nonnull MDCActivityIndicatorAnimation)animation
NS_DESIGNATED_INITIALIZER;

@end
170 changes: 1 addition & 169 deletions components/ActivityIndicator/src/MDCActivityIndicator.h
Original file line number Diff line number Diff line change
Expand Up @@ -12,172 +12,4 @@
// See the License for the specific language governing permissions and
// limitations under the License.

#import <UIKit/UIKit.h>

@class MDCActivityIndicatorTransition;
@protocol MDCActivityIndicatorDelegate;

/**
Different operating modes for the activity indicator.
This component can be used as a determinate progress indicator or an indeterminate activity
indicator.
Default value is MDCActivityIndicatorModeIndeterminate.
*/
typedef NS_ENUM(NSInteger, MDCActivityIndicatorMode) {
/** Indeterminate indicators visualize an unspecified wait time. */
MDCActivityIndicatorModeIndeterminate,
/** Determinate indicators display how long an operation will take. */
MDCActivityIndicatorModeDeterminate,
};

/**
A Material Design activity indicator.
The activity indicator is a circular spinner that shows progress of an operation. By default the
activity indicator assumes indeterminate progress of an unspecified length of time. In contrast to
a standard UIActivityIndicator, MDCActivityIndicator supports showing determinate progress and uses
custom Material Design animation for indeterminate progress.
See https://material.io/go/design-progress-indicators
*/
IB_DESIGNABLE
@interface MDCActivityIndicator : UIView

/**
The callback delegate. See @c MDCActivityIndicatorDelegate.
*/
@property(nonatomic, weak, nullable) id<MDCActivityIndicatorDelegate> delegate;

/**
Whether or not the activity indicator is currently animating.
*/
@property(nonatomic, assign, getter=isAnimating) BOOL animating;

/**
Spinner radius width. Defaults to 12dp (24x24dp circle), with a minimum of 5dp. The spinner is
centered in the view's bounds. If the bounds are smaller than the diameter of the spinner, the
spinner may be clipped when clipToBounds is true.
*/
@property(nonatomic, assign) CGFloat radius UI_APPEARANCE_SELECTOR;

/**
Spinner stroke width. Defaults to 2.5.
*/
@property(nonatomic, assign) CGFloat strokeWidth UI_APPEARANCE_SELECTOR;

/**
Show a faint ink track along the path of the indicator. Should be enabled when the activity
indicator wraps around another circular element, such as an avatar or a FAB. Defaults to NO.
*/
@property(nonatomic, assign) IBInspectable BOOL trackEnabled;

/**
The mode of the activity indicator. Default is MDCActivityIndicatorModeIndeterminate. If
currently animating, it will animate the transition between the current mode to the new mode.
*/
@property(nonatomic, assign) IBInspectable MDCActivityIndicatorMode indicatorMode;

/**
Set the mode of the activity indicator. If currently animating, it will animate the transition
between the current mode to the new mode. Default is MDCActivityIndicatorModeIndeterminate with no
animation.
*/
- (void)setIndicatorMode:(MDCActivityIndicatorMode)mode animated:(BOOL)animated;

/**
Progress is the extent to which the activity indicator circle is drawn to completion when
indicatorMode is MDCActivityIndicatorModeDeterminate. Progress is drawn clockwise to complete a
circle. Valid range is between [0-1]. Default is zero. 0.5 progress is half the circle. The
transitions between progress levels are animated.
*/
@property(nonatomic, assign) IBInspectable float progress;

/**
Set the determinate progress of the activity indicator when indicatorMode is
MDCActivityIndicatorModeDeterminate.
*/
- (void)setProgress:(float)progress animated:(BOOL)animated;

/**
The array of colors that are cycled through when animating the spinner. Populated with a set of
default colors.
@note If an empty array is provided to this property's setter, then the provided array will be
discarded and an array consisting of the default color values will be assigned instead.
*/
@property(nonatomic, copy, nonnull) NSArray<UIColor *> *cycleColors UI_APPEARANCE_SELECTOR;

/**
Starts the animated activity indicator. Does nothing if the spinner is already animating.
*/
- (void)startAnimating;

/**
Starts the animated activity indicator after performing the provided transition. The animation
cycle will begin on the cycleStartIndex provided. The startTransition will be applied with the
starting and ending positions of the indicator stroke at the moment when the animation will begin
taking into account the provided cycleStartIndex in the range [0,1]. The indicatorMode must be
MDCActivityIndicatorModeIndeterminate before calling.
*/
- (void)startAnimatingWithTransition:(nonnull MDCActivityIndicatorTransition *)startTransition
cycleStartIndex:(NSInteger)cycleStartIndex;

/**
Stops the animated activity indicator with a short opacity and stroke width animation. Does nothing
if the spinner is not animating.
*/
- (void)stopAnimating;

/**
Stops the animated activity indicator and then performs the provided transition. The provided
stopTransition will be called with the starting and ending positions of the indicator stroke at the
moment when the animation will begin in the range [0,1]. The indicatorMode must be
MDCActivityIndicatorModeIndeterminate before calling.
*/
- (void)stopAnimatingWithTransition:(nonnull MDCActivityIndicatorTransition *)stopTransition;

/**
A block that is invoked when the @c MDCActivityIndicator receives a call to @c
traitCollectionDidChange:. The block is called after the call to the superclass.
*/
@property(nonatomic, copy, nullable) void (^traitCollectionDidChangeBlock)
(MDCActivityIndicator *_Nonnull activityIndicator,
UITraitCollection *_Nullable previousTraitCollection);

@end
typedef void (^MDCActivityIndicatorAnimation)(CGFloat strokeStart, CGFloat strokeEnd);

/**
Describes an animation that can be provided to an MDCActivityIndicator instance to perform before
or after its standard cycle animation.
*/
@interface MDCActivityIndicatorTransition : NSObject

/**
The animations to be performed by MDCActivityIndicator. In this block add CAAnimations to be
animated before or after MDCActivityIndicator's cycle animation. MDCActivityIndicator will trigger
these animations and call completion after they complete.
*/
@property(nonatomic, copy, nonnull) MDCActivityIndicatorAnimation animation;

/**
The completion block to call after animation's completion. This should be used to clean up any
layers placed and animating on the MDCActivityIndicator.
*/
@property(nonatomic, copy, nullable) void (^completion)(void);

/**
The duration of the animation.
*/
@property(nonatomic, assign) NSTimeInterval duration;

- (nonnull instancetype)init NS_UNAVAILABLE;

- (nonnull instancetype)initWithCoder:(nonnull NSCoder *)aDecoder NS_UNAVAILABLE;

- (nonnull instancetype)initWithAnimation:(_Nonnull MDCActivityIndicatorAnimation)animation
NS_DESIGNATED_INITIALIZER;

@end
#import "MDCActivityIndicator+Interface.h" // IWYU pragma: export
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
// See the License for the specific language governing permissions and
// limitations under the License.

#import "MDCActivityIndicator.h"
#import "MDCActivityIndicator+Interface.h"

/*
States for the internal state machine. The states represent the last animation completed.
Expand Down

0 comments on commit 5cb61f3

Please sign in to comment.